Hibernate复合主键做外键时候的问题
碰到一个奇怪的问题 我的表映射如下:两个标是一对一的关系!主key也一样!
表一:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="jp.co.yamaha_motor.ygls.common.entity.MsSerial"
table="MS_SERIAL"
>
<composite-id name="comp_id" class="jp.co.yamaha_motor.ygls.common.entity.MsSerialPK">
<key-property
name="modelCd"
column="MODEL_CD"
type="java.lang.String"
length="6"
/>
<key-property
name="serialNo"
column="SERIAL_NO"
type="java.lang.String"
length="12"
/>
</composite-id>
<property
name="specCd"
type="java.lang.String"
column="SPEC_CD"
not-null="true"
length="4"
/>
<property
name="stmpModelCd"
type="java.lang.String"
column="STMP_MODEL_CD"
length="5"
/>
<property
name="caseNo"
type="java.lang.String"
column="CASE_NO"
length="10"
/>
<property
name="advNo"
type="java.lang.String"
column="ADV_NO"
length="8"
/>
<property
name="inspectDate"
type="java.lang.String"
column="INSPECT_DATE"
length="8"
/>
<property
name="addYh"
type="java.sql.Date"
column="ADD_YH"
/>
<property
name="addUserId"
type="java.lang.String"
column="ADD_USER_ID"
length="10"
/>
<property
name="updYh"
type="java.sql.Date"
column="UPD_YH"
/>
<property
name="updUserId"
type="java.lang.String"
column="UPD_USER_ID"
length="10"
/>
<!-- Associations -->
<!-- derived association(s) for compound key -->
<!-- end of derived association(s) -->
<!-- bi-directional one-to-one association to StkSerial -->
<one-to-one
name="stkSerial"
class="jp.co.yamaha_motor.ygls.common.entity.StkSerial"
outer-join="auto"
/>
<!-- bi-directional one-to-many association to SerialHis -->
<set
name="serialHis"
lazy="true"
inverse="true"
cascade="all"
>
<key>
<column name="MODEL_CD" />
<column name="SERIAL_NO" />
</key>
<one-to-many
class="jp.co.yamaha_motor.ygls.common.entity.SerialHis"
/>
</set>
<!-- bi-directional one-to-many association to TrnAdvDt -->
<set
name="trnAdvDts"
lazy="true"
inverse="true"
cascade="all"
>
<key>
<column name="MODEL_CD" />
<column name="SERIAL_NO" />
</key>
<one-to-many
class="jp.co.yamaha_motor.ygls.common.entity.TrnAdvDt"
/>
</set>
<!-- bi-directional many-to-one association to MsPackType -->
<many-to-one
name="msPackType"
class="jp.co.yamaha_motor.ygls.common.entity.MsPackType"
not-null="true"
>
<column name="PACK_TYPE_CD" />
</many-to-one>
<!-- bi-directional many-to-one association to MsUnitType -->
<many-to-one
name="msUnitType"
class="jp.co.yamaha_motor.ygls.common.entity.MsUnitType"
not-null="true"
>
<column name="UNIT_TYPE_CD" />
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
表二:
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="jp.co.yamaha_motor.ygls.common.entity.StkSerial"
table="STK_SERIAL"
>
<composite-id name="comp_id" class="jp.co.yamaha_motor.ygls.common.entity.StkSerialPK">
<key-property
name="modelCd"
column="MODEL_CD"
type="java.lang.String"
length="6"
/>
<key-property
name="serialNo"
column="SERIAL_NO"
type="java.lang.String"
length="12"
/>
</composite-id>
<property
name="seqNo"
type="java.lang.String"
column="SEQ_NO"
not-null="true"
length="3"
/>
<property
name="stkDate"
type="java.lang.String"
column="STK_DATE"
length="8"
/>
<property
name="statusHisSeqNo"
type="java.lang.String"
column="STATUS_HIS_SEQ_NO"
length="3"
/>
<property
name="addYh"
type="java.sql.Date"
column="ADD_YH"
/>
<property
name="addUserId"
type="java.lang.String"
column="ADD_USER_ID"
length="10"
/>
<property
name="updYh"
type="java.sql.Date"
column="UPD_YH"
/>
<property
name="updUserId"
type="java.lang.String"
column="UPD_USER_ID"
length="10"
/>
<!-- Associations -->
<!-- derived association(s) for compound key -->
<!-- end of derived association(s) -->
<!-- bi-directional one-to-one association to MsSerial -->
<one-to-one
name="msSerial"
class="jp.co.yamaha_motor.ygls.common.entity.MsSerial"
outer-join="auto"
constrained="true"
/>
<!-- bi-directional many-to-one association to MsStkPoint -->
<many-to-one
name="msStkPoint"
class="jp.co.yamaha_motor.ygls.common.entity.MsStkPoint"
not-null="true"
>
<column name="STK_POINT_CD" />
</many-to-one>
<!-- bi-directional many-to-one association to MsSite -->
<many-to-one
name="msSite"
class="jp.co.yamaha_motor.ygls.common.entity.MsSite"
not-null="true"
>
<column name="SITE_CD" />
</many-to-one>
<!-- bi-directional many-to-one association to MsPdStkStatus -->
<many-to-one
name="msPdStkStatus"
class="jp.co.yamaha_motor.ygls.common.entity.MsPdStkStatus"
not-null="true"
>
<column name="PD_STK_STATUS_CD" />
</many-to-one>
<!-- bi-directional many-to-one association to MsStkCondition -->
<many-to-one
name="msStkCondition"
class="jp.co.yamaha_motor.ygls.common.entity.MsStkCondition"
not-null="true"
>
<column name="STK_COND_CD" />
</many-to-one>
<!-- bi-directional many-to-one association to MsWhLocation -->
<many-to-one
name="msWhLocation"
class="jp.co.yamaha_motor.ygls.common.entity.MsWhLocation"
not-null="true"
>
<column name="STK_CTL_WH_CD" />
<column name="LOC_NO" />
</many-to-one>
<!-- bi-directional many-to-one association to MsCompany -->
<many-to-one
name="msCompany"
class="jp.co.yamaha_motor.ygls.common.entity.MsCompany"
not-null="true"
>
<column name="OWNERSHIP_CD" />
</many-to-one>
</class>
</hibernate-mapping>
用主键做表一检索时候出现很奇怪的问题(PK的类也有生成equals等方法)
如果数据不存在时候不会出错,数据存在时候就会出现如下错误。
org.springframework.orm.hibernate3.HibernateSystemException: Provided id of the wrong type. Expected: class jp.co.yamaha_motor.ygls.common.entity.StkSerialPK, got class jp.co.yamaha_motor.ygls.common.entity.MsSerialPK;