我一直在努力解决这个问题几个小时,从数据库的角度来看这看起来很简单但很难用hibernate来解决。
我有两个表:VehicleCategory和Vehicle。
车辆有一个VehicleCategory,因此Vehicule使用外键引用VehiculeCategory。
VehicleCategory :
车辆
以下是我的观点:我不希望将attr4用作我的主键,但我想在主键中使用其他外来属性。
这是我做的映射:
<class name="Vehicle" table="vehicle">
<composite-id>
<key-property name="name" column="name"/>
<key-many-to-one name="vehiclecategory" class="VehicleCategory">
<column name="attr1" not-null="true" />
<column name="attr2" not-null="true" />
<column name="attr3" not-null="true" />
</key-many-to-one>
</composite-id>
<many-to-one name="vehiclecategory" class="VehicleCategory" fetch="select" insert="false" update="false" >
<column name="attr1" not-null="true" />
<column name="attr2" not-null="true" />
<column name="attr3" not-null="true" />
<column name="attr4" not-null="true" />
</many-to-one>
</class>
我得到以下异常:
Foreign key (FK_s94md9vv63hrpwhyaw4rfxec5:vehicle [attr1,attr2,attr3])) must have same number of columns as the referenced primary key (vehicle_category [attr4,attr1,attr2,attr3])
我明白这个例外意味着什么。但是我不知道为什么我会这样做,因为从我的角度来看,我确实在我的外键中引用了4列主键,并且只在我的Vehicule主键中使用了3个。
我正在使用Hibernate 4.3.6
感谢您的帮助!