0

我的查询是这样的:到等效criteriabuilder查询复杂的查询(EntityManager的)

QUERY1从使用实体A =选择a.id其中a.id在(:列表1)
和不存在(来自ENTITY2选择EX2 EX2,在其中ex2.assignedId = a.id)
工会
从ENTITY2前选择ex.assignedId,ENTITY3 PI
其中ex.entity3Id = pi.id和ex.assignedId在(:列表1)
和ex.assignedTypeId =:assignedTypeId和pi.processStatus =:状态
和不存在
(从ENTITY2 EX1选择ex1.assignedId,ENTITY3 PI1
其中ex1.entity3Id = pi1.id和ex1.assignedId = ex.assignedId
和ex1.assignedTypeId =:assignedTypeId
和pi1.processStatus <>:status);

同时试图执行查询,

查询existingIds = em.createQuery(QUERY1); //对于所有参数设置

在org.hibernate.hql.ast.ParameterTranslationsImpl

完全检查所有的括号和参数线87抛出的NullPointerException。等效转换在mysql中起作用。 有人可以帮助我转换查询与CriteriaBuilder,发现很难进行转换。

回答

0

不知道是否JPQL supports联合操作。你把这个作为NamedQuery或者你正在创建(entityManager.createQuery())?

+0

它的entityManager.createQuery()与**'查询fetchIds = em.createQuery(query1); fetchIds.setParameter(list1,listValues); fetchIds.setParameter(“assignTypeId”,15); fetchIds.setParameter(status,4);'** – techie2k 2012-08-06 08:41:01

+0

正如我所说的,正在形成的查询是错误的。使用连接而不是内部选择。在相同的where子句中使用OR条件而不是联合操作。请通过我在评论中提到的JPQL文档。 – Chris 2012-08-06 08:44:09

+0

不,我需要附加结果集,即使用union的原因。 – techie2k 2012-08-06 08:45:23