java - EclipseLink - 查询准备失败,发生意外错误

标签 java spring jpa spring-boot eclipselink

执行命令时,EntityManager 抛出(all https://pastebin.com/zKYBhsv8 )

[EL Warning]: 2017-10-14 20:07:55.332--UnitOfWork(402037615)--Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): org.eclipse.persistence.exceptions.QueryException
Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.NullPointerException].
Internal Exception: java.lang.NullPointerException
Query: ReportQuery(referenceClass=MovieEntity )

代码如下所示

我创造

final CriteriaBuilder cb = this.entityManager.getCriteriaBuilder();
final CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
final Root<MovieEntity> root = countQuery.from(MovieEntity.class);

然后我创建谓词

final Predicate whereClause = MovieSpecs
            .getFindPredicate(root, cb, countries);

这就是方法

public static Predicate getFindPredicate(
        final Root<MovieEntity> root,
        final CriteriaBuilder cb
        final List<CountryType> countries
) {
    final List<Predicate> predicates = new ArrayList<>();
    if(countries != null && !countries.isEmpty()) {
        final List<Predicate> orPredicates =
                countries
                        .stream()
                        .map(status -> cb.equal(root.get(MovieEntity_.countries), countries))
                        .collect(Collectors.toList());
        predicates.add(cb.or(orPredicates.toArray(new Predicate[orPredicates.size()])));
    }
    return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}

然后在countQuery中设置谓词

countQuery.select(cb.count(root)).where(whereClause);

并执行命令

final Long count = this.entityManager.createQuery(countQuery).getSingleResult();

这里我抛出上述错误。

电影实体:https://pastebin.com/CvhEQFZD MovieEntity_:http://pastebin.com/ZyJL0nmM

最佳答案

我认为当 EclipseLink 尝试处理针对集合完成的国家匹配时会出现问题:

.map(status -> cb.equal(root.get(MovieEntity_.countries), *countries*))

我认为您的意图是检查流项目是否相等

.map(status -> cb.equal(root.get(MovieEntity_.countries), status))

关于java - EclipseLink - 查询准备失败,发生意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748527/

相关文章:

java - 如何将源代码导入到eclipse中

java - 6 次迭代后,在 for 循环中将新值赋给 double

java - 将现有的 Jersey Postgres 应用程序迁移到 Spring Boot

java - 使用 JAX-WS 在 java 中返回原始 SOAP 响应

java - 当我使用 CookieLocaleResolver 时,我可以设置无效的 cookie 来使 Spring Web 应用程序崩溃

spring - ant.propertyFile每次都会更新评论

Java Mockito 与 RestTemplate.exchange 使用泛型

java - 什么是 JPA 实现?

java - 是否可以在包含目标+连接字段的子类上使用@JoinTable?

java - Spring 数据JPA : query ManyToMany