JPA JPQL查询返回null

时间:2017-08-28 10:52:21

标签: jpa jpql

我有以下查询,尝试使用@Embeddable id类的一部分来获取Employee实体对象:

public List<EmployeeTask> getEmployeeById(){
                    return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091'" ).getResultList();

上面的代码在我的jsf页面上返回null。但是当我把它改为:

public List<EmployeeTask> getEmployeeById(){
                        return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091'" ).getResultList();

再次返回null。但是当我尝试时:

public List<EmployeeTask> getEmployeeById(){
                        return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091%'" ).getResultList();

 }

它按预期返回Entity对象的内容......任何人都知道为什么会这样?

有关我需要做什么的更多详细信息:EmployeeTask表包含员工执行的所有任务。 EmployeeTaskPK是字符串empcode,字符串taskcode,日期以来。我想在我的Entity实例中获取给定empcode的所有记录,并将它们列在jsf数据表中。

谢谢,

1 个答案:

答案 0 :(得分:1)

问题不在于jpa,而是在数据库列定义中,如果您希望列的大小固定为CHAR,或者在这种情况下为NCHAR,那么您就是这样做的。

问题是当你有一个较短的字符串,如&#34; 5091&#34;只有4号: 你将在db中获得的是&#34; 5091&#34;最后有四个空白。

查询不会返回您的行,因为&#34; 5091&#34;与空白不同的是&#34; 5091&#34;没有,唯一一个正常工作的是like '5091%'

您可以使用NVARCHAR来解决,它会修剪较低长度的字符串,或者在查询中需要添加空格(这对我来说似乎是一种不好的做法)

public List<EmployeeTask> getEmployeeById(){
                    return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091    '" ).getResultList();