0

左连接不检索空值

当 ABname like "%pac%" OR ACname like "%pac%" 时,我需要获取所有记录 A

  Class<T> entityClass = (Class<T>) A.class;
    PathBuilder<T> entity = new PathBuilder<T>(entityClass, "entity");

    EntityManager entityManager = entityManagerProvider
            .getEntityManager(entity.getType());

    JPAQuery query = new JPAQuery(entityManager);
    query = query.from(entity);

    PathBuilder<?> associationPathB = entity.get("B");
    query = query.leftJoin(associationPathB).fetch();

    PathBuilder<?> associationPathC = entity.get("C");
    query = query.leftJoin(associationPathC).fetch();


    BooleanBuilder baseSearch = new BooleanBuilder();
    baseSearch.and(associationPathB.getString("name").lower().like("%pac%"))
            .or(associationPathC.getString("name").lower().like("%pac%"));

    query.where(baseSearch.getValue());

    long count = query.count();

生成的查询是

select entity from A entity 
left join fetch entity.B 
left join fetch entity.C 
where lower(entity.B.name) like ?1 escape '!' 
or lower(entity.C.name) like ?2 escape '!' 

count 只返回 2 条记录,但我有 10 条 A 类型的记录,B.name like='pac'。

C列中只有2条记录不为空,但这是带有OR条件的左连接

为什么不返回 10 条记录?

如果我在数据库中执行查询,它会返回 10 个寄存器

select * from A entA
left join B entB on entB.id = entA.entB
left join C entC on entC.id = entA.entC
where entB.name  like '%pac%' OR
entC.name like '%pac%'
4

0 回答 0