簡體   English   中英

多個限制的休眠獨立條件

[英]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 ()].
  1. 我們可以在一個單獨的條件中對不同實體使用多個限制嗎?

  2. 我們可以有一個命名查詢,當我進入分離標准時,該查詢將返回我一個用戶對象以及其中的嵌入實體嗎(這樣我就可以直接執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM