Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 条件查询2,通过3个实体级别进行查询_Java_Criteria Api - Fatal编程技术网

Java 条件查询2,通过3个实体级别进行查询

Java 条件查询2,通过3个实体级别进行查询,java,criteria-api,Java,Criteria Api,我正在学习CriteriaAPI,在创建查询时遇到了一个问题。 以下是我的结构: 一个管理员有一个组列表,一个组有一个管理员列表(如此多的关系) 一个集团有一个公司列表,一个公司有一个集团(所以一个公司) 要查找管理员的所有组,我创建了此请求: @Override public List<Group> getAllGroupsManagedByAdmin(Admin admin) { final CriteriaBuilder cb = entityManager.getCrite

我正在学习CriteriaAPI,在创建查询时遇到了一个问题。 以下是我的结构:

一个管理员有一个组列表,一个组有一个管理员列表(如此多的关系)

一个集团有一个公司列表,一个公司有一个集团(所以一个公司)

要查找管理员的所有组,我创建了此请求:

@Override
public List<Group> getAllGroupsManagedByAdmin(Admin admin)
{
 final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
 final CriteriaQuery<Group> query = cb.createQuery(Group.class);
 final Root<Admin> admins = query.from(Admin.class);

 query.where(cb.equal(admins.get(Admin_.id), admin.getId()))
 .select(admins.join(Admin_.groups));

 return this.entityManager.createQuery(query).getResultList();
}
@覆盖
公共列表getAllGroupsManagedByAdmin(管理员)
{
最终CriteriaBuilder cb=entityManager.getCriteriaBuilder();
最终的CriteriaQuery=cb.createQuery(Group.class);
最终根管理员=query.from(Admin.class);
query.where(cb.equal(admins.get(Admin.id),Admin.getId())
.选择(管理员加入(管理员组));
返回此.entityManager.createQuery(query.getResultList();
}
现在我尝试查找一个组的所有公司,但请确保该组由参数中提供的管理员管理,方法定义为:

public List<Company> getCompaniesByGroupIdManagedByAdmin(String groupId, Admin admin)
public List getCompaniesByGroupIdManagedByAdmin(字符串groupId,Admin)
但是我所有的草稿都失败了。有人能帮我一下吗?
谢谢大家!

最终我自己发现,解决方案比我预期的更简单:

public List<Company> getCompaniesByGroupIdManagedByAdmin(String groupId, Admin admin)
{
    final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    final CriteriaQuery<Company> query = cb.createQuery(Company.class);
    final Root<Admin> admins = query.from(Admin.class);

    final Join<Admin, Group> groups = admins.join(Admin_.groups);

    final Predicate[] predicates = new Predicate[2];

    predicates[0] = cb.equal(admins.get(Admin_.id), admin.getId());
    predicates[1] = cb.equal(groups.get(Group_.id), groupId);

    query.where(predicates)
    .select(groups.join(Group_.companies));

    return this.entityManager.createQuery(query).getResultList();
}
public List getCompaniesByGroupIdManagedByAdmin(字符串groupId,Admin)
{
最终CriteriaBuilder cb=entityManager.getCriteriaBuilder();
最终标准查询=cb.createQuery(Company.class);
最终根管理员=query.from(Admin.class);
最终加入组=管理员加入(管理员组);
最终谓词[]谓词=新谓词[2];
谓词[0]=cb.equal(admins.get(Admin.id),Admin.getId());
谓词[1]=cb.equal(groups.get(Group.id),groupId);
where(谓词)
.选择(集团.加入(集团公司));
返回此.entityManager.createQuery(query.getResultList();
}