Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中映射到复合唯一(非主键)键_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 在Hibernate中映射到复合唯一(非主键)键

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()

我有两个类-用户和角色。数据库中有相应的表,还有一个名为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