hibernate联合主键有关问题
求助hibernate联合主键问题
StoreAfter 和AfterCommission 是一对多的关系 ,StoreAfter 的主键storeNumber是AfterCommission 的外键
AfterCommission的主键是联合主键(STORENUMBER,PAYMENTTYPE,AREAID)
实体类如下
配置文件如下
StoreAfter 和AfterCommission 是一对多的关系 ,StoreAfter 的主键storeNumber是AfterCommission 的外键
AfterCommission的主键是联合主键(STORENUMBER,PAYMENTTYPE,AREAID)
实体类如下
- Java code
StoreAfter.java public class StoreAfter extends BaseEntity implements Serializable{ private static final long serialVersionUID = 4038378438651961912L; private String StoreNumber;//门店 private int openstate;//门店后返启用状态 private String operater;//操作者 private String modifdate; //修改日期 private String jfcs1;//预留参数1 private String jfcs2;//预留参数2 private String note ;//日志 Set<AfterCommission> afterCommission = new HashSet<AfterCommission>(0); ...................................省略 } AfterCommissionPKID.java public class AfterCommissionPKID extends BaseEntity implements Serializable{ private static final long serialVersionUID = -6654357823934475704L; private StoreAfter storeNumber; //门店 private Integer paymentType; //缴费类型 private String areaId; //地区号 //它必须重新实现 equals() 和 hashCode() 方法,始终和组合关键字在数据库中的概念保持一致 @Override public boolean equals(Object obj) { if(obj instanceof AfterCommissionPKID){ AfterCommissionPKID pk=(AfterCommissionPKID)obj; if(this.storeNumber.equals(pk.storeNumber)&&this.paymentType==pk.paymentType&&this.areaId.equals(pk.areaId)){ return true; } } return false; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((storeNumber == null) ? 0 : storeNumber.hashCode()); result = prime * result + ((paymentType == null) ? 0 : paymentType.hashCode()); result = prime * result + ((areaId == null) ? 0 : areaId.hashCode()); return result; } 。。。。。。。。省略 } AfterCommission.java public class AfterCommission extends BaseEntity implements Serializable{ private static final long serialVersionUID = 3605580290128721830L; private UUID afterCommId; private AfterCommissionPKID afterCommissionPKID ; private int aftertype; //后返类型 private int afterNum; //后返量反额度 private String afterComm; //后返比例 private int channelstate; //类型地区后返开启状态 private String operater; //操作者 private String modifdate; //修改日期 private String jfcs1; //预留参数1 private String jfcs2; //预留参数2 private String note ; //日志 ...................省略 }
配置文件如下
- XML code
StoreAfter.hbm.xml <hibernate-mapping> <class name="com.neili.mdgl.hibernate.mdyj.entity.StoreAfter" table="STOREAFTER"> <id name="storeNumber" type="java.lang.String"> <column name="STORENUMBER" precision="10" scale="0" /> </id> <property name="openstate" type="java.lang.Integer"> <column name="OPENSTATE"/> </property> <property name="operater" type="java.lang.String"> <column name="OPERATER" /> </property> <property name="modifdate" type="java.lang.String"> <column name="MODIFDATE" /> </property> <property name="jfcs1" type="java.lang.String"> <column name="jfcs1"/> </property> <property name="jfcs2" type="java.lang.String"> <column name="jfcs2"/> </property> <property name="note" type="java.lang.String"> <column name="note"/> </property> <set name="afterCommission" inverse="true" cascade="save-update"> <key> <column name="STORENUMBER" precision="10" scale="0" not-null="true"/> </key> <one-to-many class="com.neili.mdgl.hibernate.mdyj.entity.AfterCommission" /> </set> </class> </hibernate-mapping> --------------------------------- AfterCommission.hbm.xml <hibernate-mapping> <class name="com.neili.mdgl.hibernate.mdyj.entity.AfterCommission" table="aftercommission"> <composite-id name="afterCommissionPKID" class="com.neili.mdgl.hibernate.mdyj.entity.AfterCommissionPKID"> <key-many-to-one name="storeNumber" class="com.neili.mdgl.hibernate.mdyj.entity.StoreAfter"> <column name="STORENUMBER"/> </key-many-to-one> <key-property name="paymentType" type="java.lang.Integer"> <column name="PAYMENTTYPE" /> </key-property> <key-property name="areaId" type="java.lang.String"> <column name="AREAID"/> </key-property> </composite-id> <property name="afterCommId" type="java.util.UUID" > <column name="AFTERCOMMID" precision="10" scale="0" /> </property> <property name="aftertype" type="java.lang.Integer"> <column name="AFTERTYPE"/> </property> <property name="afterNum" type="java.lang.Integer"> <column name="AFTERNUM" /> </property> <property name="afterComm" type="java.lang.String"> <column name="AFTERCOMM"/> </property> <property name="channelstate" type="java.lang.Integer"> <column name="CHANNELSTATE"/> </property> <property name="operater" type="java.lang.String"> <column name="OPERATER" /> </property> <property name="modifdate" type="java.lang.String"> <column name="MODIFDATE" /> </property> <property name="jfcs1" type="java.lang.String"> <column name="jfcs1"/> </property> <property name="jfcs2" type="java.lang.String"> <column name="jfcs2"/> </property> <property name="note" type="java.lang.String"> <column name="note"/> </property> </class> </hibernate-mapping>