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