簡體   English   中英

在休眠狀態下,錯誤的值用作獲取集的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM