我是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 [models.Car]中的property [users]
有人可以清楚地向我解释如何以正确的方式使用注释(非常糟糕的文档),并告诉我为什么会出现此错误?
答案 0 :(得分:6)
你猜对了:)
您的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外键位于相关类中的哪个位置。
答案 1 :(得分:1)
用户强>
@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