[英]In hibernate, wrong value used as parameter for fetching set
我必須休眠具有一對多關系的實體和表。 一個是用戶,另一個是汽車對象。 我認為差異之處在於,我正在嘗試在父表的主鍵和子表的外鍵之外的其他字段上進行聯接。
例如,我的表如下所示:
CREATE TABLE `User` (
`userId` int(32) NOT NULL,
`serial` varchar(32) NOT NULL,
PRIMARY KEY (`userId`) USING BTREE,
UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `Car` (
`carId` int(32) NOT NULL,
`serial` varchar(32) NOT NULL,
PRIMARY KEY (`carId`) USING BTREE,
KEY `FK_USER_serial` (`serial`),
CONSTRAINT `FK_USER_serial` FOREIGN KEY (`serial`) REFERENCES `User` (`serial`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的映射如下:
用戶映射:
<hibernate-mapping>
<class name="User" table="User">
<id name="userId" type="int">
<generator class="native" />
</id>
<property name="serial" type="string"></property>
<set name="cars" table="Car"
inverse="true" lazy="true" fetch="select">
<key>
<column name="serial" not-null="true" />
</key>
<one-to-many class="Car" />
</set>
</class>
</hibernate-mapping>
汽車映射:
<hibernate-mapping>
<class name="Car" table="Car">
<id name="id" type="int">
<generator class="native" />
</id>
<property name="serial" type="string"></property>
</class>
</hibernate-mapping>
我在那些表中具有的值如下:
用戶:userId = 172 serial = 1
汽車:carId = 159序列號= 1
carId = 160序列= 1
我在log4j中啟用了跟蹤級別的日志記錄功能,發現休眠狀態試圖通過“ serial”字段來檢索汽車,但是在172的where子句中使用的是“ userId”,而不是實際上會帶回孩子的1。
我可以在表或映射中進行哪些更改,以使休眠狀態使用串行外鍵而不是Car表甚至沒有的userId。
JB Nizet的評論是正確的解決方案。 我將主鍵更改為串行。 它已經是唯一索引,更適合用作主鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.