Hibernate JPA 联合主键

作者:Rui 发布时间:September 9, 2015 分类:JAVA,Hibernate 浏览:844

两个或多个字段组成的主键,我们叫联合主键,在JPA中定义联合主键需要单独定义一个主键类来表示联合主键。

下面是定义一个主键类:

public class UserRolePk implements Serializable {
    public User user;
 
    public Role role;
 
    public UserRolePk() {}
 
    public int hashCode() {
        return (this.user.id + "_" + this.role.id).hashCode();
    }
 
    public boolean equals(UserRolePk userRolePk) {
        return this.user.equals(userRolePk.user) && this.role.equals(userRolePk.role);
    }
}

主键类要满足一下要求:

必须可序列化(其中之一对泛型BaseDAO设计有点方便)
必须具备共有的无参构造函数
必须实现hashCode和equals方法
现在在UserRole 类必须具有UserRolePk类所具有的成员属性,并且这些成员属性都要标注@Id注释

@Entity
@Table(name = "t_user_role")
@IdClass(UserRolePk.class)
public class UserRole implements Serializable {
 
    @Id
    @JoinColumn(name = "user_id")
    @ManyToOne
    public User user;
 
    @Id
    @JoinColumn(name = "role_id")
    @ManyToOne
    public Role role;
 
    public UserRole() {}
 
    public UserRole(Long userId, Long roleId) {
        this.user = new User(userId);
        this.role = new Role(roleId);
    }
}

标签: hibernate

添加新评论 »