是否可以使用criteria-builder执行一对多外键联接?

时间:2019-06-19 13:01:03

标签: sql spring jpa persistence criteria

假定以下两个数据库模型:

所有者idname

宠物idnameowner

其中Pet.ownerOwner的{​​{1}}

的外键

您能否使用criteria builder join查询所有名称与 Denise 类似的用户,并且宠物的名称与 Bella 类似?

SQL查询看起来类似于:

id
  

还将使用排序选项,因此只能使用条件查询,而不能直接创建类型化查询(和设置参数)。

1 个答案:

答案 0 :(得分:1)

可以肯定。您可以使用Criteria API进行JPQL所做的一切。

阅读教程:https://www.objectdb.com/java/jpa/query/criteria

您的查询将如下所示:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Owner> criteriaQuery = criteriaBuilder.createQuery(Owner.class);

Root<Pet> pet = criteriaQuery.from(Pet.class);

Join<Pet, Owner> owner = pet.join(Pet_.owner);
criteriaQuery
        .select(owner)
        .where(criteriaBuilder
            .and(
                 criteriaBuilder.like(owner.get(Owner_.name), "Denise"), 
                 criteriaBuilder.like(pet.get(Pet_.name), "Bella")));

List<Owner> resultList = em.createQuery(criteriaQuery).getResultList();