Как установить отношения между таблицами 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
войти в картину. Присоединиться к колонке