Java 在Hibernate中映射到复合唯一(非主键)键
我有两个类-用户和角色。数据库中有相应的表,还有一个名为USER_ROLE的表将两者链接起来 用户在列“id”上有一个主键,在列“realm”和“realm\u USER\u id”上有一个复合唯一键。角色在列“角色id上有主键 用户角色有3列-角色id,领域,领域用户id 角色id引用角色表中的角色id,并且(领域,领域用户id)引用用户表中的复合键。我没有访问数据库的权限,因此无法更新架构 用户和角色之间存在多对多关系。我希望能够对用户调用getRoles(),对角色调用getUsers() 类用户:Java 在Hibernate中映射到复合唯一(非主键)键,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有两个类-用户和角色。数据库中有相应的表,还有一个名为USER_ROLE的表将两者链接起来 用户在列“id”上有一个主键,在列“realm”和“realm\u USER\u id”上有一个复合唯一键。角色在列“角色id上有主键 用户角色有3列-角色id,领域,领域用户id 角色id引用角色表中的角色id,并且(领域,领域用户id)引用用户表中的复合键。我没有访问数据库的权限,因此无法更新架构 用户和角色之间存在多对多关系。我希望能够对用户调用getRoles(),对角色调用getUsers()
@Entity
@Table(name="USER")
public class User {
..other fields..
@ManyToMany(fetch = FetchType.LAZY, targetEntity=Role.class)
@JoinTable(name = "USER_ROLE",
joinColumns = {
@JoinColumn(name = "realm", nullable = false, updatable = false),
@JoinColumn(name = "realm_user_id", nullable = false, updatable = false)
},
inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) })
private Set<Role> roles;
我尝试创建一个包含realm和realm_user_id的单独类,在@IdClass注释中引用,但失败了,因为用户已经在id上有一个主键。我尝试使用mappedBy注释,但也不起作用 您是否尝试了@Embeddeble和@Embedded注释?我将realm和realm_user_id移动到@embeddeble类。现在我得到一个“referencedColumnNames未映射到单个属性”错误。然后你能检查这个答案是否适用于你吗?不,与问题中提到的错误相同
@ManyToMany(fetch = FetchType.LAZY,
cascade={CascadeType.PERSIST,CascadeType.MERGE},
targetEntity=User.class
)
@JoinTable(name = "USER_ROLE",
joinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) },
inverseJoinColumns={
@JoinColumn(name="realm",nullable=false, updatable=false),
@JoinColumn(name="realm_user_id",nullable=false, updatable=false)
})
private Set<User> users;
A Foreign key refering User from Role has the wrong number of column. should be 1