如何设置表格之间的关系Ebean/Play框架
我是Ebean世界的新手,在设置实体之间的关系时遇到一些困难。如何设置表格之间的关系Ebean/Play框架
我基本上有两个类,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找不到映射 财产[网友]在[models.Car]
有人能解释我清楚如何使用注释的正确方法(文档非常差),并告诉我,为什么我得到这个错误?
你猜错了:)
你User
应该有辆@OneToMany
关系,以便:
@OneToMany(mappedBy = "user", cascade=CascadeType.ALL)
public List<Car> car = new ArrayList<Car>();
,而你的Car
应该有一个@ManyToOne
关系:
@ManyToOne(cascade = CascadeType.ALL)
public User user;
上照顾@OneToMany
annota的mappedBy
属性重刑:你需要告诉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
这里代表关系的所有者是双向的关系很重要。
认为在正常情况下,一辆汽车可以存在,而没有拥有它的用户意味着用户是关系中的所有者。因此,在您的情况下,用户是关系的所有者。 Mapped By
但上面的代码将无法正常工作The attribute mappedBy is undefined for the annotation type ManyToOne
在这种情况下@JoinColumn
进入画面。Join Column
我想最后得到的逻辑。没有用户的汽车不能存在,这意味着用户是关系的所有者,对吗? – Mornor 2015-03-02 21:36:36
@Mornor你是对的。实体是一个POJO(普通的*ava对象),所以你可以把它和OOP类似,就像我们用来学习的父类和子类一样。在你的关系中你应该小心使用级联,就像我的回答I只将级联类型all(表示坚持,删除等)给用户,所以如果你删除用户,所有相应的汽车将被删除,但你不想在汽车中的行为(这完全取决于你的关系)。 – silentprogrammer 2015-03-03 05:05:31
您将mappedBy写入Car类。因此,关系的所有者是用户(因为没有用户的汽车就不能存在)。简而言之,mappedBy必须写在不是所有者的类中,对吗? ManyToOne注释未定义MappedBy。 – Mornor 2015-03-03 08:09:02
错误的映射两个实体之间表示彼此之间的不同关系 – silentprogrammer 2015-03-02 16:22:15