复合主键的配置 @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());
	}
}





你可能感兴趣的:(String,table,null,equals,Class)