hibernate联合主键注解配置

在网上看到好多方法,结果拿来用还是出现了一些问题。现在整理一下

1、主键类

import javax.persistence.Column;


public class UserRoleUionPK implements java.io.Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String userId;
    private String roleId;
    
    
    /*public UserRoleUionPK() {
        super();
    }

    public UserRoleUionPK(String userId, String roleId) {
        this.userId = userId;
        this.roleId = roleId;
    }*/
    @Column(name="user_id")
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
    @Column(name="role_id")
    public String getRoleId() {
        return roleId;
    }

    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    /*  @Override  
        public boolean equals(Object o) {  
            if(o instanceof UserRoleUionPK){  
                UserRoleUionPK key = (UserRoleUionPK)o ;  
                if(this.getUserId().equals(key.getUserId()) && this.getRoleId().equals(key.getRoleId())){  
                    return true ;  
                }  
            }  
            return false ;  
        }  
          
        @Override  
        public int hashCode() {  
            return this.roleId.hashCode()+this.userId.hashCode();  
        }  */
}

网上有的说必须重写equals和hashcode,还有带参构造和无参构造,其实不然,我在项目中将其注释掉没有发现问题。

我这边主要注重的一点是@Column注解,之前没有加入@Colunm一直报列名无效的问题。

entity类

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "sys_user_role")
public class SysUserRole implements java.io.Serializable {

    private UserRoleUionPK uionPK;

    @EmbeddedId
    public UserRoleUionPK getUionPK() {
        return uionPK;
    }

    public void setUionPK(UserRoleUionPK uionPK) {
        this.uionPK = uionPK;
    }

}

2、主键类

import javax.persistence.Column;

public class UserRoleUionPK implements java.io.Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String userId;
    private String roleId;

    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Column(name = "role_id")
    public String getRoleId() {
        return roleId;
    }

    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    
}

entity类

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

@Entity
@Table(name = "sys_user_role")
@IdClass(UserRoleUionPK.class)
public class SysUserRole implements java.io.Serializable {

    
    private String userId;
    private String roleId;
    @Id
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    @Id
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }

}

 

转载于:https://www.cnblogs.com/volare/p/3944812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate配置联合主键,可以通过使用 @IdClass 或 @EmbeddedId 注解来实现。 1. 使用 @IdClass 注解: 首先,需要创建一个用于表示联合主键的类,该类需要实现 Serializable 接口,并且需要包含所有联合主键字段。例如: ``` public class MyCompositeKey implements Serializable { private Long id1; private Long id2; // constructors, getters, setters, equals, hashCode, etc. } ``` 然后,在实体类中使用 @IdClass 注解,并指定联合主键类的名称。例如: ``` @Entity @IdClass(MyCompositeKey.class) public class MyEntity { @Id private Long id1; @Id private Long id2; // other entity fields, getters, setters, etc. } ``` 2. 使用 @EmbeddedId 注解: 首先,需要创建一个用于表示联合主键的类,该类需要实现 Serializable 接口,并且需要使用 @Embeddable 注解标记。例如: ``` @Embeddable public class MyCompositeKey implements Serializable { private Long id1; private Long id2; // constructors, getters, setters, equals, hashCode, etc. } ``` 然后,在实体类中使用 @EmbeddedId 注解,并指定联合主键类的名称。例如: ``` @Entity public class MyEntity { @EmbeddedId private MyCompositeKey id; // other entity fields, getters, setters, etc. } ``` 以上就是在 Hibernate配置联合主键的两种方式。需要注意的是,使用 @IdClass 注解时需要在实体类中指定所有联合主键字段,而使用 @EmbeddedId 注解时只需要在联合主键类中指定即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值