我有一個spring-hibernate應用程序,它無法正確映射對象:基本上我有2個域對象,Post
和User
。語義是每個帖子都有一個相應的用戶。Spring-hibernate映射問題
的Post
域對象看起來大致如下:
class Post {
private int pId;
private String attribute;
...
private User user;
//getters and setters here
}
正如你所看到的,Post
包含User
參考。當我加載一個Post
對象時,我想要對應User
對象加載(懶惰 - 只在需要時)。
我的映射如下所示:
<class name="com...Post" table="post">
<id name="pId" column="PostId" />
<property name="attribute" column="Attribute" type="java.lang.String" />
<one-to-one name="User" fetch="join"
class="com...User"></one-to-one>
</class>
當然,我有User
基本映射設置。
就我的表模式而言,我有一個表post
與外國UserId
鏈接到user
表。
我覺得這個設置應該工作,但是當我加載迫使User
對象的延遲加載頁面時,我注意到正在生成以下Hiberate查詢:
Select ... from post this_ left outer join user user2_ on this.PostId=user2_.UserId ...
這顯然是錯誤的:它應該加入UserId
從post
與UserId
從user
,但它不正確地加入PostId
從post
(其主鍵)UserId
從user
。
任何想法?謝謝!
更新: 由於一對夫婦的帖子下面我現在意識到,我應該一直在使用一個多到一的映射,而不是一比一的。我改變了映射post
下以下幾點:
<many-to-one name="User" class="com...User" column="uId"/>
但現在我得到一個運行時錯誤告訴我,有沒有叫uId
屬性。這是有道理的,因爲我的post
域對象中沒有uId
列(我只是引用了user
對象)。現在我對我如何讓Hibernate意識到它需要將帖子表中的外鍵映射到用戶表格感到困惑。應該明確地將uId
屬性添加到我的post
域對象中作爲佔位符的外鍵?
我希望我做的意義......
謝謝,但將此映射放置在「後」映射中是否正確?我試着用類似的不正確結果。我不知道如何讓它在Post表中加入UserId,因爲我的域對象沒有任何外鍵的概念,只是對用戶對象的引用。 – James 2010-03-25 00:06:49
感謝您的更新,請您詳細說明「您是否指定了外鍵列的名稱?」,因爲我懷疑這可能是我的問題? – James 2010-03-25 00:19:11
謝謝!!!我浪費了這麼多時間...因爲你可能猜到我是冬眠的新手...... – James 2010-03-25 00:27:01