我有一张有汽车的桌子:
- 卡迪
- 客户编号
- 。
映射文件如下所示:
<hibernate-mapping>
<class name="org.project.Car" table="tblCar">
<id name="id" column="CarId" type="int">
<generator class="native"/>
</id>
<property column="CustomerId" name="customerId" type="text"/>
<many-to-one column="CustomerId" name="customer" class="org.project.Customer" insert="false" update="false" fetch="select"/>
...
</class>
</hibernate-mapping>
问题在于多对一列:当我删除它时,我可以装载所有汽车。当它在那里时,我收到以下错误:
INFO: could not read column value from result set: Cus2_3_0_; Value 00005-C cannot be converted to INTEGER.
,而 00005-C 是客户的 ID。
为什么Hibernate想要在说文本时将customerId列转换为整数?或者我可以只对外键使用整数 ID 吗?
编辑:我的客户映射大致如下所示:
<hibernate-mapping>
<class name="org.project.Customer" table="tblCustomer">
<id name="id" column="Id" type="integer">
<generator class="native"/>
</id>
<property column="CustomerId" name="customerId" type="text"/>
...
<set name="cars" inverse="true" lazy="true" fetch="select">
<key column="CustomerId" not-null="true"/>
<one-to-many class="org.project.Car"/>
</set>
</class>
</hibernate-mapping>
不知道您的"客户"映射或表是什么样子的,我猜 Hibernate 默认尝试使用客户表的"CustomerId"列。
您需要在映射中指定客户表上的 KEY 列。
我发现了问题:
我不得不将 property-ref 添加到我的客户映射中的键中,以便告诉 Hibernate 我正在使用的键不是主键而是另一个字段。这就解释了为什么Hibernate想要将值转换为int:主键是一个整数。