如何设置表Ebean / Play框架之间的关系

时间:2015-03-02 16:16:45

标签: java playframework playframework-2.2 ebean playframework-2.3

我是Ebean这个世界的新手,我在实体之间建立一些关系遇到了一些困难。

我基本上有两个课程,UserCar

用户可以拥有几辆汽车(所以我猜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]

有人可以清楚地向我解释如何以正确的方式使用注释(非常糟糕的文档),并告诉我为什么会出现此错误?

2 个答案:

答案 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