JPA JPQL查询返回null
我有以下查询,试图获取使用@Embeddable ID类的一部分Employee实体对象:JPA JPQL查询返回null
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();
}
返回预期的实体对象的内容...任何人都知道为什么出现这种情况?
有关我需要执行的更多详细信息:EmployeeTask表包含员工执行的所有任务。 EmployeeTaskPK是字符串empcode,字符串任务代码,起始日期。我想在我的实体实例中获取给定empcode的所有记录,并将它们列在jsf数据表中。
谢谢
的问题是不是在JPA但在数据库列定义,如果你希望你的列是一个固定大小CHAR
,或在这种情况下NCHAR
,是你走什么。
问题是当你有一个长度较短的字符串,如只有大小为4的“5091”时: 你在db中得到的结果是“5091”,最后有四个空格。
查询不会返回行,因为“5091”用空格是由“5091”不同没有,唯一的一个正常工作是like '5091%'
您可以通过使用NVARCHAR
这将修剪下长度字符串解决或在查询中添加需要的空格(对我来说这似乎是一个不好的做法)
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091 '").getResultList();
谢谢你的建议。改变数据库目前不是一个选项。我用trim功能来解决这个问题:'return em.createQuery(“SELECT a FROM EmployeeTask a where TRIM(a.id.empcode)like'5091'”).getResultList();' – Bonzay
检查您的db:empcode列是一个char大小为4的字符吗?也许有空格 – Zeromus
empcode是NCHAR(8)。非常感谢。我想如果我将它定义在我的实体的属性@Column它将工作 – Bonzay
不行columnDefinition =“NCHAR(8)”不起作用。任何想法如何在jpa中使用nchar数据类型? – Bonzay