簡體   English   中英

休眠條件:查找嵌套在列表中的屬性

[英]Hibernate Criteria : Find property nested in a list

我正在嘗試使用CriteriaBuilder構建以下查詢:

SELECT * FROM job j, asset a, asset_users au
    where j.JOB_ID = a.ASSET_ID and a.ASSET_ID = au.ASSET_ID and au.USER_ID = 6

作業有資產的地方,資產有用戶的清單...我想只返回資產中包含給定用戶的作業的清單...

我看到有些人這樣做:

Session session = this.sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(Company.class);
criterion = Restrictions.eq("companyRoles.name", "ADMIN");
criteria.add(criterion);
List<Company> companyList = criteria.list();

試圖復制到criteriabuilder,但沒有運氣。 我得到的只是它在對象列表(userList)中找不到我的用戶ID。 猜猜我的例子更難,因為您必須訪問(job).asset.userList.id之類的對象。 順便說一句,也嘗試過這個:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Job> cq = cb.createQuery(Job.class);
Root<Job> jobRoot = cq.from(Job.class);
Join<Job, User> assetJoin = jobRoot.join("asset.userList");
cq.where(assetJoin.get("id").in(id));

有同樣的問題...找不到路徑。

很感謝任何形式的幫助! 謝謝

我認為您錯過了一步。 您需要下一級別的加入。

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Job> cq = cb.createQuery(Job.class);
Root<Job> jobRoot = cq.from(Job.class);

// join the asset
Join<Job, Asset> assetJoin = jobRoot.join("asset");

// join the list of users
Join<Asset, User> assetUserJoin = assetJoin.join("userList");

cq.where(assetUserJoin.get("id").in(id));

assetUsrJoin.get("id")的類型為Path<Long>或類似的名稱。 JPA標准API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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