2015-11-29 47 views
0

我試圖獲取狀態仍顯示爲非活動狀態並處理它們的用戶列表。 此用戶嵌入了UserDetails,UserActivity實體。所有實體表都具有狀態列,其值爲非活動狀態。針對多個限制的休眠分離標準

現在我使用分離的標準爲,

detachedcriteria.for類(User.class)。新增(限制。方程( 「狀態」, 「無效」)。setresulttransformer(criteria.distinct_element)

這是給我的用戶對象及其嵌入的實體作爲一個單一的用戶對象

但現在,我必須調整查詢,以確保狀態爲嵌入式類爲非活動狀態因此,我選擇去對於命名查詢,因爲我不知道如何爲單個分離條件中的不同實體添加多個限制。

在命名查詢中,我加入了所有表以獲取數據。我能夠獲得數據,但它的對象數組的返回列表。該列表的第一個對象中包含以下實體的數組。

命名查詢:

從我們的用戶,UserDetail UD,UserActivity UC其中us.id = ud.id和us.id = UC .ID和us.status = ud.status和us.status = UC 'status和us.status ='Inactive'

List = query.list();

Object ob = lst.get(0);

其中ob包含[User(),UserDetail(),UserActivity()]。 Q1)我們可以在一個單獨的分離標準中對不同實體的多個限制嗎?

Q2),我們可以有一個名爲查詢將返回我一個單一的用戶對象在它嵌入實體一起爲我的DetachedCriteria我得到?(這樣我就可以直接執行User.get UserDetail())

謝謝。

回答

0

可以使用別名此:

假設你有用戶類像

class User { 
    ... 
    private UserDetail userDetail; 
    private UserActivity userActivity; 
    ... 
} 

你不能直接把限制你的對象的第二級屬性。通過使用.createAlias()方法,您可以將JOIN語句添加到您生成的SQL中,並使用別名添加限制。

DetachedCriteria dc = DetachedCriteria 
    .forClass(User.class , "u") 
    .add(Restrictions.Eq("u.status","Inactive") 
    .createAlias("u.userDetail", "ud") 
    .add(Restrictions.Eq("ud.status","Inactive") 
    .createAlias("u.userActivity", "ua") 
    .add(Restrictions.Eq("ua.status","Inactive") 
    .setResultTransformer(Criteria.DISTINCT_ROOT_ELEMENT); 
+0

嗨Ghokun,謝謝你的回覆。我會嘗試你描述的方法。但有一個問題,如果我的財產之一是列表,並且它是一對多的關係。像:class User {... private UserDetail userDetail;私人列表 userActivity; ...} ..這裏一個用戶有很多活動。 – user4325796

+0

.createAlias(「u.userActivity」,「ua」)和.createAlias(「u.userActivities」,「ua」)都有效。您也可以將JoinType定義爲第三個參數。 – Ghokun

+0

它工作。感謝你的時間。 – user4325796