添加映射<字符串,实体>
@Entity
public class User {
@Id
String user_Name;
@ElementCollection
@CollectionTable(name="userfriendmap")
@MapKeyColumn(name="userName")
@LazyCollection(LazyCollectionOption.FALSE)
Map<String, Friend> friends;
}
@Entity
public class Friend implements Serializable{
@Id
String userName;
}
我使用Hibernate 我有这些实体。一个用户有一张好友地图。 首先user1将friend2添加到地图,然后user2将friend1添加到地图, 然后user1将friend3添加到映射中,但当user3将friend1添加到我创建mergeUser时,会出现违反约束的错误
问题是它创建了一个具有3个属性的表userfriendmap,但只有两个属性是主键的一部分,并且必须是其中的三个属性
userfriendmap的表 用户名PK,好友\用户名FK,用户名PK FK
我不知道怎么解决这个问题。我不知道我如何为地图做桌子是否正确
# 1 楼答案
映射这一点的一种方法如下所示。请注意,我使用的是一个代理键,并使用@MapKey属性,该属性基于关联值的属性而不是数据库列为映射设置键
测试代码:
联接表数据: