java - hibernate 标准 : Find property nested in a list

标签 java hibernate criteria-api

我正在尝试使用 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

如果作业有 Assets 并且 Assets 有用户列表...... 我只想返回具有包含给定用户的 Assets 的作业列表...

我看到有些人这样做:

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();

尝试将其复制到标准构建器,但没有成功。我得到的只是它无法在对象列表(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 Criteria API

关于java - hibernate 标准 : Find property nested in a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24147330/

相关文章:

java - 无法使用 Hibernate 正确地将数据插入数据库

java - Hibernate 枚举映射

hibernate - 为什么我的多级继承映射没有像我期望的那样工作?

hibernate - 关于 JPA 2.0 标准的一些基本问题

nhibernate - 如何使用 NHibernate 表示加入分组子查询?

Java获取name属性的值

java - 获取实体的存储库

java语音命令

java - 如何在一次查询中获取所有数据

java - Oracle Apex自定义登录页面身份验证