Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠条件:查找嵌套在列表中的属性_Java_Hibernate_Criteria Api - Fatal编程技术网

Java 休眠条件:查找嵌套在列表中的属性

Java 休眠条件:查找嵌套在列表中的属性,java,hibernate,criteria-api,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 其中作业有一个资源,资源有一个用户列表。。。 我只想返回包含给定用户的资产的作业列表 我看到一些人这样做: Session session = this.sessionFactory.ge

我正在尝试使用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();
Session Session=this.sessionFactory.getCurrentSession();
条件=session.createCriteria(Company.class);
标准=限制.eq(“companyRoles.name”、“ADMIN”);
标准。添加(标准);
List 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 cq=cb.createQuery(Job.class);
Root jobRoot=cq.from(Job.class);
Join-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));
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Job.class);
Root jobRoot=cq.from(Job.class);
//加入资产
Join-assetJoin=jobRoot.Join(“资产”);
//加入用户列表

加入

天哪,你真棒。。。真的让我哭了。。。工作起来像。。。喜欢火箭队。。。教了我很多!非常感谢你!