首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Hibernate 映射錯誤:Duplicate property mapping of dirId,many-to-one 與 property 重複映射同一列

     編輯:程式設計疑難解答

錯誤訊息

`Duplicate property mapping of dirId found in com.cailikun.Product`

原因

在 `.hbm.xml` 中,同一數據庫列 `dirId` 被 **`` 和 `` 同時映射**:

<property name="dirId" column="dirId"/>          <!-- 簡單屬性映射 -->
<many-to-one name="directory" column="dirId"/> <!-- 關聯映射,同一列 -->

Hibernate 不允許同一列被多個映射元素管理(除非 `insert="false" update="false"`)。

解決方法

  1. 刪除 ``,只保留 ``。需要 `dirId` 值時用 `directory.getDirId()` 獲取。
  2. 或保留 ``,將 `` 改為 `insert="false" update="false"`**(唯讀關聯):
    <many-to-one name="directory" column="dirId" 
        insert="false" update="false" class="com.xxx.Directory"/>
    但這樣無法通過 `product.setDirectory(dir)` 維護關聯,僅能讀取。

最佳實踐

  • **關聯映射優先**:保留 ``,實體類中**不單獨定義外鍵屬性 `dirId`**,只定義關聯對象 `Directory directory`。
  • 若確需外鍵值(如 DTO、報表),在 Service/DAO 層用 `directory.getId()` 取得,或用 `@Formula`/`@Transient` 衍生屬性(JPA)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved