2016-06-08 89 views
0

我已经尝试过以下但不工作。在jpql中选择case语句

String mainQuerySt = "select o.progressStatus, " 
+ " CASE WHEN o.assigneeEmployee IS NOT NULL THEN o.assigneeEmployee.fullNameSt ELSE '' END as assignee " 
+ " from Tt o" 

em.createQuery(mainQuerySt).getResultList(); 

这是什么问题?实际上,如果它不是null,并且是空字符串,我想要显示AssigneeEmployee全名。

我使用EclipseLink v2.1作为JPA

感谢advnace。

EclipseLink Tutorial

+0

解释'不工作'。你有错误吗? – tak3shi

+0

请显示错误,查询对我来说似乎很好 – SCouto

+0

没有错误,但没有得到结果。但是如果我省略了case语句,它就是返回结果。对我来说似乎很奇怪。 – sarwar026

回答

1

您正在使用o.assigneeEmployee IS NOT NULL,而我认为o.assigneeEmployee是有关系的。使用点符号强制一个内部连接,然后将过滤出空值。尝试

String mainQuerySt = "select o.progressStatus, " 
+ " CASE WHEN assigneeEmployee IS NOT NULL THEN assigneeEmployee.fullNameSt ELSE '' END as assignee " 
+ " from Tt o left outer join o.assigneeEmployee assigneeEmployee" 

如果它不返回的结果预期,那么你就需要打开SQL日志记录,看看所产生的SQL,并显示你所期望的结果。