Hibernate:外键部分用作主键

时间:2014-09-10 16:36:05

标签: java mysql hibernate orm foreign-keys

我一直在努力解决这个问题几个小时,从数据库的角度来看这看起来很简单但很难用hibernate来解决。

我有两个表:VehicleCategory和Vehicle。

车辆有一个VehicleCategory,因此Vehicule使用外键引用VehiculeCategory。

VehicleCategory

  • String attr1
  • String attr2
  • 整数attr3
  • String attr4
  • PRIMARY KEY(attr1,attr2,attr3,attr4)

车辆

  • 字符串名称
  • String attr1
  • String attr2
  • 整数attr3
  • String attr4
  • FOREIGN KEY(attr1,attr2,attr3,attr4)REFERENCES VehicleCategory
  • PRIMARY KEY(name,attr1,attr2,attr3)

以下是我的观点:我不希望将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

感谢您的帮助!

0 个答案:

没有答案