映射到Hibernate中的复合唯一(非主要)键

时间:2014-01-07 09:36:17

标签: java spring hibernate jpa

我有两个类 - USER和ROLE。数据库中有相应的表,以及一个名为USER_ROLE的表,用于链接这两个表。

USER在“ id ”列上有一个主键,在“领域”和“ realm_user_id ”列上有一个复合唯一键。 ROLE在列“ role_id

上有一个主键

USER_ROLE有3列 - role_id 领域 realm_user_id

role_id 引用ROLE表中的 role_id ,( realm,realm_user_id )引用USER中的复合键。我无法访问数据库,因此无法更新架构。

用户和角色之间存在多对多关系。我希望能够在User上调用getRoles(),在Role上调用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;

班级角色:

    @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

我尝试创建一个单独的类,其中包含在 @IdClass 注释中引用的realm和realm_user_id,但由于用户已经在 id 上拥有主键,因此失败了。我尝试使用mappedBy注释,但这也不起作用。

0 个答案:

没有答案