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

Is it possible to perform a One-To-Many foreign-key JOIN with criteria-builder?

假设有以下两个数据库模型:

所有者: id, name

宠物: id, name, owner

其中 Pet.ownerOwnerid

的外键

您能否使用 criteria builder join?

SQL 查询类似于:

SELECT o FROM Owner o JOIN Pet p ON o.id = p.owner
WHERE o.name LIKE 'Denise' AND p.name LIKE 'Bella'

Sorting options will also be used, so it is only possible to use the criteria queries, instead of creating a typed query directly (and setting parameters).

当然是。您可以使用 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();