我使用以下模型来匹配用户和项目。问题是在MySQL表中生成的user_item
表中只有两列id
和date
。 user
和item
不在那里。 是否可以预期?我希望这两列应该存在并分别存储user
和item
的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
表有列user
和item
,它们具有类型long和相应对象的商店ID。为什么我的理解在这里不正确?
答案 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;
...
}