复合主键的配置 @idClass


在做项目的过程中,虽然还并没有做出自己想要的功能,但我确实学会了不少,总结如下:

一:

一般情况下一个表中的主键,id intidentity(1,1)primary key

这是最常见的咯,用注解的形式标记这种主键也很简单

@Id @GeneratedValue @Column(name="RecId") public int getRecId() { return RecId; }

复合主键个人认为用到的很少,呜呜还是碰到了,由于没有经验,东装西摸,浪费了很长时间才把复合主键配好了,并且还出了很多异常,如下所示:

--一個裱中可以有多個字段組成的主鍵 create table EL_TransIdTable( TableName nvarchar(50) , LastTransId nvarchar(15), Prefix nchar(5), DomainId nvarchar(10) primary key(TableName,DomainId) )

其中 TableName 、DomainId两个字段作为此表的主键

在配置中主要分为两个步骤

1 为符合主键,建立一个复合主键类,这个类包括两个字段,(有几个字段组成主键 就包含几个字段 )这个复合主键类实现Serializable接口,有public 无参的构造方法 重写equals 和hashcode方法

2:在实体类里面用idclass标示复合主键类 详情如下:

新建复合主键类TableDomainIdPK.java

package com.barcode.Model; import java.io.Serializable; public class TableNameDomainIdPK implements Serializable{ public TableNameDomainIdPK(){ } private String TableName; private String DomainId; public String getTableName() { return TableName; } public void setTableName(String tableName) { TableName = tableName; } public String getDomainId() { return DomainId; } public void setDomainId(String domainId) { DomainId = domainId; } @Override public int hashCode() { final int PRIME = 31; int result =1; result=PRIME*result+((TableName==null)?0:TableName.hashCode()); result=PRIME*result+((DomainId==null)?0:DomainId.hashCode()); return result; } @Override public boolean equals(java.lang.Object obj) { if(this ==obj){ return true; } if(null ==obj ){ return false; } final TableNameDomainIdPK other=(TableNameDomainIdPK)obj; if(DomainId==null){ if(other.DomainId!=null){ return false; } }else if(!DomainId.equals(other.DomainId)){ return false; } if(TableName==null){ if(other.TableName!=null){ return false; } }else if (!TableName.equals(other.TableName)){ return false; } return true; } } 新建实体类EL_TransIdTable.java

实体类中的配置如下


package com.barcode.Model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Table; @Entity @Table(name="EL_TransIdTable") @IdClass(TableNameDomainIdPK.class) public class EL_TransIdTable implements Serializable { private String TableName; private String LastTransId; private String Prefix; private String DomainId; @Id @Column(name="TableName", nullable = false) public String getTableName() { return TableName; } public void setTableName(String tableName) { TableName = tableName; } @Column(name="LastTransId") public String getLastTransId() { return LastTransId; } public void setLastTransId(String lastTransId) { LastTransId = lastTransId; } @Column(name="Prefix") public String getPrefix() { return Prefix; } public void setPrefix(String prefix) { Prefix = prefix; } @Id @Column(name="DomainId", nullable = false) public String getDomainId() { return DomainId; } public void setDomainId(String domainId) { DomainId = domainId; } public void Print_Info(){ System.out.println(this.getDomainId()+this.getLastTransId()+this.getPrefix()+this.getTableName()); } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值