在设计数据库表的时候,往往会设计出带有复合主键的表,即表的记录由多个字段联合标识,如:
表
CREATETABLETB_HOUR_DATA(STAT_DATEDATENOTNULL,PATH_IDNUMBER(20)NOTNULL,VALUEVARCHAR2(512BYTE),TYPENUMBER(1)NOTNULL)
其中,复合主键为(STAT_DATE,PATH_ID,TYPE)
针对这种情况,hibernate(jpa)的annotation映射声明如下:
1、复合主键类HourDataPK
packagenet.kong.wolf.stat.db.entity;importjava.io.Serializable;importjava.util.Date;importjavax.persistence.Column;importjavax.persistence.Embeddable;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;importjavax.persistence.Temporal;importjavax.persistence.TemporalType;@EmbeddablepublicclassHourDataPKimplementsSerializable{/***//****/privatestaticfinallongserialVersionUID=1L;@ManyToOne@JoinColumn(name="path_id",nullable=false)privatePathpath;@Column(name="stat_date")@Temporal(TemporalType.DATE)privateDatestatDate;privateinttype;publicPathgetPath(){returnpath;}publicvoidsetPath(Pathpath){this.path=path;}publicDategetStatDate(){returnstatDate;}publicvoidsetStatDate(DatestatDate){this.statDate=statDate;}publicintgetType(){returntype;}publicvoidsetType(inttype){this.type=type;}}
2、实体类HourData:
packagenet.kong.wolf.stat.db.entity;importjava.io.Serializable;importjavax.persistence.EmbeddedId;importjavax.persistence.Entity;importjavax.persistence.Table;importnet.kong.wolf.stat.core.Text;@Entity@Table(name="TB_HOUR_DATA")publicclassHourDataimplementsSerializable{/***//****/privatestaticfinallongserialVersionUID=1L;@EmbeddedIdprivateHourDataPKpk;privateStringvalue;publicStringgetValue(){returnvalue;}publicvoidsetValue(Stringvalue){this.value=value;}publicint[]getHours(){returnparseValue(value);}privateint[]parseValue(Stringvalue){int[]result=newint[24];for(inti=0;i<24;i++){result[i]=-1;}if(value==null){returnresult;}String[]hs=Text.splitCSV(value);intlen=Math.min(24,hs.length);for(inti=0;i
===
网上可以找到很多资料的啊