[英]Hibernate detached criteria for multiple Restrictions
我正在嘗試獲取狀態仍顯示為非活動的用戶列表並進行處理。 該用戶嵌入了UserDetails,UserActivity實體。 所有實體表的狀態列的值為“無效”。
現在,我使用獨立標准,因為
detachedcriteria.for class(User.class).add(Restrictions.
Eq("status","Inactive").setresulttransformer(criteria.distinct_element)
這給了我用戶對象及其嵌入的實體作為單個用戶對象。
但是現在,我必須調整查詢以確保嵌入式類的狀態也處於非活動狀態。 因此,我選擇了命名查詢,因為我不知道如何在單個分離條件中為不同實體添加多個限制。
在命名查詢中,我將聯接所有表以獲取數據。 而且我能夠獲取數據,但返回對象數組的列表。 此列表的第一個對象中包含以下實體的數組。
命名查詢:
from User us, UserDetail ud, UserActivity uc where us.id=ud.id and us.id=uc
.id and us.status=ud.status and us.status=uc.status and us.status='Inactive'
List<User>=query.list ();
Object ob=lst.get(0);
Where ob contains [User(),UserDetail(),UserActivity ()].
我們可以在一個單獨的條件中對不同實體使用多個限制嗎?
我們可以有一個命名查詢,當我進入分離標准時,該查詢將返回我一個用戶對象以及其中的嵌入實體嗎(這樣我就可以直接執行User.getUserDetail()
)。
您可以為此使用別名:
假設您有User類,例如
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.