没有左侧的DOT节点

时间:2018-11-28 10:49:05

标签: java hibernate jinq

我将jinq版本1.8.11与休眠版本4.3一起使用 使用休眠会话工厂而不是实体管理器。

我正在尝试以下查询:

JPAJinqStream<Routine> routineStream = stream.streamAll(getCurrentSession(), Routine.class);

    if (text.isPresent()) {
        final String searchText = text.get();
        routineStream = routineStream
                .leftOuterJoin(
                        (r, source) -> source.stream(NLSProperty.class),
                        (r, nls) -> nls.getVarKey().equals("routine.100.title")
                ).select(pair -> pair.getOne());"%" + searchText + "%")).select(Pair::getOne);
    }
    List<Routine> tp = routineStream.toList();

当不存在可变文本时,查询有效,并且得到结果。 当出现可变文本时,出现以下错误:

java.lang.IllegalStateException: DOT node with no left-hand-side!

有什么想法我做错了吗?

我已经调试了jinq,它生成的查询如下:

SELECT A FROM de.etherapists.ehealth.model.routine.Routine A LEFT OUTER JOIN de.etherapists.ehealth.model.NLSProperty B ON B.varKey = 'routine.100.title';

谢谢

1 个答案:

答案 0 :(得分:0)

好,所以我将休眠版本升级到5.1 仍在使用会话工厂而不是实体管理器。

现在的代码是:

if (text.isPresent()) {
        routineStream = routineStream
                .leftOuterJoin(
                        (routine, source) -> source.stream(NLSProperty.class),
                        (routine, nls) -> routine.getTitle().equals(nls.getVarKey())
                )
                .where(pair -> JPQL.like(pair.getOne().getShortCode(), "%" + text + "%")
                        || JPQL.like(pair.getTwo().getVarValue(), "%" + text + "%"))
                .select(Pair::getOne)
    }

它就像一个魅力