假定以下两个数据库模型:
所有者:id
,name
宠物:id
,name
,owner
其中Pet.owner
是Owner
的{{1}}
您能否使用criteria builder join查询所有名称与 Denise 类似的用户,并且宠物的名称与 Bella 类似?
SQL查询看起来类似于:
id
还将使用排序选项,因此只能使用条件查询,而不能直接创建类型化查询(和设置参数)。
答案 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();