我有以下查询,尝试使用@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数据表中。
谢谢,
答案 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();