定义复合主键类:Override Object的equals和hasCode方法;同时实现java.io.Serializable接口。如下:
/* * Created on 2007-02-05 */ package com.snow.hib.pojos;
import java.io.Serializable;
import javax.persistence.Column; /** * 定义一个复合主键 * @author snowflower * */ public class ComplexIDObject implements Serializable { private static final long serialVersionUID = 1L; private String pkA; private String pkB; /** * @return Returns the pkA. */ @Column(name="keyA") public String getPkA() { return pkA; } /** * @param pkA The pkA to set. */ public void setPkA(String pkA) { this.pkA = pkA; } /** * @return Returns the pkB. */ @Column(name="keyB") public String getPkB() { return pkB; } /** * @param pkB The pkB to set. */ public void setPkB(String pkB) { this.pkB = pkB; } public int hashCode() { int result; result = pkA.hashCode(); result = 29 * result + pkB.hashCode(); return result; }
public boolean equals(Object obj) { if(this == obj)return true; if ( !( obj instanceof ComplexIDObject ) ) return false; final ComplexIDObject o = (ComplexIDObject) obj; if(!pkA.equals(o.getPkA()))return false; if(!pkB.equals(o.getPkB()))return false; return true; } } 下面是对上面符合主键类的使用,需要注意的和复合主键类似:
/* * Created on 2007-02-05 */ package com.snow.hib.pojos;
import java.io.Serializable;
import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Table; /** * * @author snowflower * */ @Entity @Table(name="complex_PK") public class UseComplexIDObject implements Serializable { private static final long serialVersionUID = 1L; private ComplexIDObject comPk; /** * @return Returns the comPk. */ @EmbeddedId public ComplexIDObject getComPk() { return comPk; } /** * @param comPk The comPk to set. */ public void setComPk(ComplexIDObject comPk) { this.comPk = comPk; } public boolean equals(Object o) { if ( this == o ) return true; if ( !( o instanceof UseComplexIDObject ) ) return false;
final UseComplexIDObject parent = (UseComplexIDObject) o;
if ( !comPk.equals( parent.comPk ) ) return false;
return true; }
public int hashCode() { return comPk.hashCode(); } } 下面是一段测试代码: UseComplexIDObject comp = new UseComplexIDObject(); ComplexIDObject pk = new ComplexIDObject(); pk.setPkA("0001A"); pk.setPkB("0001B"); comp.setComPk(pk); manager.saveComplexO(comp); 这样就OK了,至于Annotation已经在源文件中使用了,这里就不多说了。