Как установить отношения между таблицами Ebean/Play framework

Я новичок в мире Ebean, и я сталкиваюсь с некоторыми трудностями, чтобы установить некоторые отношения между сущностями.

У меня в основном два класса, User а также Car,

У пользователя может быть несколько машин (так что, думаю, OneToMany) и автомобиль может принадлежать одному пользователю (так что я думаю, OneToOne).

Как я могу связать эти две сущности? Вот то, что я сделал до сих пор

пользователь

@Entity
public class User extends Model{
    @Id
    @GeneratedValue
    public int id;  
    public String name; 
    @ManyToMany(cascade=CascadeType.ALL)
    public List<Car> car = new ArrayList<Car>();
}

Автомобиль

@Entity
public class Car extends Model{
    @Id
    @GeneratedValue
    public int id;
    @OneToOne(cascade = CascadeType.ALL)
    public User user; 
}

И я получаю следующую ошибку

PersistenceException: Ошибка в models.User.car Не удается найти свойство mappedBy [users] в [models.Car]

Может кто-нибудь объяснить мне, как правильно использовать аннотации (очень плохая документация), и скажите, почему я получаю эту ошибку?

2 ответа

Решение

Вы не догадались:)

Ваш User должен иметь @OneToMany Отношения с автомобилями таковы:

@OneToMany(mappedBy = "user", cascade=CascadeType.ALL)
public List<Car> car = new ArrayList<Car>();

в то время как ваш Car должен иметь @ManyToOne отношения:

@ManyToOne(cascade = CascadeType.ALL)
public User user; 

Позаботься о mappedBy недвижимость в @OneToMany аннотация: вам нужно указать Ebean, где внешний ключ находится в связанном классе.

пользователь

@Entity
public class User extends Model{
@Id
@GeneratedValue
public int id;  
public String name; 
@OneToMany(cascade=CascadeType.ALL)
public List<Car> car = new ArrayList<Car>();
}

Автомобиль

@Entity
public class Car extends Model{

@Id
@GeneratedValue
public int id;
@ManyToOne(mappedBy="car")          //will give you an error
public User user; 
}

mappedBy здесь представляет владельца отношения, который важен в двунаправленном отношении.

Подумайте, в нормальном состоянии автомобиль может существовать без Пользователя, который владеет им, это означает, что Пользователь является владельцем отношения. Так что в вашем случае, Пользователь является владельцем отношения. Отмечено

Но приведенный выше код не будет работать The attribute mappedBy is undefined for the annotation type ManyToOne

В таком случае @JoinColumn войти в картину. Присоединиться к колонке

Другие вопросы по тегам