【问题标题】:complex query to equivalent criteriabuilder query(EntityManager)等效标准构建器查询的复杂查询(EntityManager)
【发布时间】:2012-08-03 05:15:08
【问题描述】:

我的查询是这样的:

query1 = 从 entity1 中选择 a.id a where a.id in (:List1)
并且不存在(从 entity2 ex2 中选择 ex2,其中 ex2.assignedId = a.id)
工会
从 entity2 ex ,entity3 pi 中选择 ex.assignedId
其中 ex.entity3Id = pi.id 和 ex.assignedId 在 (:List1)
和 ex.assignedTypeId = :assignedTypeId 和 pi.processStatus = :status
不存在
(从 entity2 ex1、entity3 pi1 中选择 ex1.assignedId
其中 ex1.entity3Id = pi1.id 和 ex1.assignedId = ex.assignedId
和 ex1.assignedTypeId = :assignedTypeId
和 pi1.processStatus :status);

在尝试执行查询时,

查询现有Ids=em.createQuery(query1); //设置所有参数

在 org.hibernate.hql.ast.ParameterTranslationsImpl 的第 87 行抛出 NullPointerException

完全检查了所有的大括号和参数。等效转换在 mysql 中有效。 有人可以帮助我使用 CriteriaBuilder 转换查询,发现转换很困难。

【问题讨论】:

    标签: java hibernate jpa-2.0 entitymanager hibernate-entitymanager


    【解决方案1】:

    完全不确定JPQL supports 是否联合操作。您是将其作为 NamedQuery 还是动态创建 (entityManager.createQuery()) ?

    【讨论】:

    • 它是 entityManager.createQuery() 和 'Query fetchIds=em.createQuery(query1); fetchIds.setParameter(list1, listValues); fetchIds.setParameter("assignTypeId", 15); fetchIds.setParameter(status, 4);'
    • 正如我所说,正在形成的查询是错误的。使用连接而不是内部选择。在相同的 where 子句中使用 OR 条件而不是 Union 操作。请仔细阅读我在评论中提到的 JPQL 文档。
    • 不,我需要追加结果集,这就是为什么使用联合的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多