2010-02-17 172 views
0

假設我有對應於PostsUsers的域對象。不過,我有相應的數據庫表,其中包含與「帖子」和「用戶」有關的信息。Java Spring-Hibernate映射問題?

目前我已經在Hibernate中正確設置了映射,以便我可以從「posts」表中取出信息並將其保存爲Post對象。然而,我然後在我的Posts域對象中添加了對User對象的引用(以便每個帖子可以有對應的User對象)。

在我的數據庫結構中,「posts」表有一個user_id列,它是「users」表中的外鍵。

我的問題是:在我的DAO查詢「上崗」表時,我必須參加的「用戶」表,然後返回的用戶數據在某種程度上鑄造成User對象?或者我可以簡單地離開我的查詢(即只是查詢「posts」表),並以某種方式添加休眠映射,以便Posts表中的User屬性被填充? (我想我想知道如果我正確地設置了映射,Hibernate是否可以自動生成連接 - 例子也很棒!)

謝謝,我希望我已經清楚了。

更新:我想弄清楚,這裏有一些代碼段:

我的帖子對象:

public class Posts { 

    private String title; 
    ... 
    private User user; 

    //getters and setters here 
} 

我的帖子表列:

post_id (primary key) 
title 
... 
user_id (foreign key into User table) 

我的映射(不考慮考慮到用戶屬性)目前看起來像這樣:

<class name="com...Post" table="post"> 
    <id name="pId" column="post_id" /> 
    <property name="title" column="title" type="java.lang.String" /> 
    ... 
      <!-- Need to add mapping here to join with user table?? --> 
</class> 

所以基本上,我的DAO目前取得一個沒有private User user屬性的Post對象(因爲我剛剛添加了這個)。我的問題是如何在Post對象中填充該屬性(,以便獲取的Post對象也包含用戶對象)?

很抱歉,如果當前的職位已經回答了這個......他們只是稍微有一些混亂給我..

回答

0

更新:好了,你有一個令人困惑的答案首先是因爲你問了一個令人困惑的問題...回答你的問題再度確實是定義一個多對一映射郵政類(正如其他人已經提到的那樣)。現在,如果你想用一個單一的連接查詢來獲取整個東西,你寫的:

<many-to-one name="user" class="User" column="user_id" fetch="join" /> 

原帖:

默認情況下,休眠獲取懶洋洋地。實際上,只有在需要提前抓取時,才需要觸摸lazy屬性。默認懶惰的行爲,例如粗糙取計劃:

Post post = (Post) session.load(Post.class, new Long(123)); 
// at this point, post refers to a proxy object created by Hibernate 
// in the background - no post or user data has been loaded from DB 
post.getId(); 
// post still refers to the proxy object 
User user = post.getUser(); 
// post is now loaded, but user not - it refers to a proxy object 
String name = user.getName(); // Now the user data is loaded from DB 

所以,如果你是幸福的多個查詢,你不需要做任何特殊。 OTOH如果要在連接查詢中獲取所有帖子和用戶數據,則需要設置屬性fetch="join" in your mapping for the用戶屬性。

1

如果我正確理解你的問題,我相信你正在尋找多對一的映射(許多職位對一個用戶)。將以下內容添加到Post對象的映射中:

<many-to-one name="user" class="User" column="user_id" lazy="false" /> 
+0

同意以上答案。該映射對於獲取用戶記錄是必需的。 – Padmarag