播放2:DB表中不存在@ManyToOne字段

时间:2013-10-20 21:41:40

标签: java database jpa playframework-2.0 ebean

我使用以下模型来匹配用户和项目。问题是在MySQL表中生成的user_item表中只有两列iddateuseritem不在那里。 是否可以预期?我希望这两列应该存在并分别存储useritem的ID。

Item.java

@Entity
public class Item extends Model {
    @Id
    public Long id;


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

User.java

@Entity
public class User extends Model {
    @Id
    public Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="item")
    public List<UserItem> userItems = new ArrayList<UserItem>();
}

UserItem.java

@Entity
public class UserItem extends Model {
    @Id
    public Long id;

    @ManyToOne
    @JoinColumn(name = "id")
    public User user;

    @ManyToOne
    @JoinColumn(name = "id")
    public Item item;

    public Date date;

    ...
}

编辑:我期望item_user表有列useritem,它们具有类型long和相应对象的商店ID。为什么我的理解在这里不正确?

1 个答案:

答案 0 :(得分:2)

您不能拥有两个名称相同的列。在UserItem中删除注释@JoinColumn或为用户和项目设置不同的名称(即:user_id,item_id)

编辑:小心@OneToMany注释的获取类型。如果您有大量数据,那么在加载用户或项目时会遇到很大的性能问题;)

编辑

@Entity
public class UserItem extends Model {
    @Id
    public Long id;

    @ManyToOne
    @JoinColumn(name = "user")
    public User user;

    @ManyToOne
    @JoinColumn(name = "item")
    public Item item;

    public Date date;

    ...
}