JPA JPQL 查询返回 null
JPA JPQL query returning null
我有以下查询,试图使用部分 @Embeddable id class 获取 Employee 实体对象:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091'" ).getResultList();
上面的代码 returns 在我的 jsf 页面上为 null。但是当我将其更改为:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091'" ).getResultList();
再次 returns 无效。但是当我尝试时:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091%'" ).getResultList();
}
它 returns Entity 对象的内容符合预期...有人知道为什么会这样吗?
关于我需要做什么的更多细节:EmployeeTask table 包含员工执行的所有任务。 EmployeeTaskPK 是字符串 empcode,字符串 taskcode,date since。我想在我的实体实例中获取给定 empcode 的所有记录,并将它们列在 jsf datatable.
上
谢谢,
问题不在 jpa 中,而是在数据库列定义中,如果您希望您的列是固定大小 CHAR
,或者在这种情况下 NCHAR
,这就是您想要的。
问题是当你有一个像“5091”这样的长度较小的字符串时,它的大小只有 4:
你将在 db 中得到的是“5091”,最后有四个空格。
查询不会 return 你的行,因为带空格的“5091”与不带空格的“5091”不同,唯一正确工作的是 like '5091%'
您可以通过使用 NVARCHAR
来解决 trim 长度较短的字符串或在查询中需要的地方添加空格(对我来说这似乎是一种不好的做法)
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091 '" ).getResultList();
我有以下查询,试图使用部分 @Embeddable id class 获取 Employee 实体对象:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091'" ).getResultList();
上面的代码 returns 在我的 jsf 页面上为 null。但是当我将其更改为:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091'" ).getResultList();
再次 returns 无效。但是当我尝试时:
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode like '5091%'" ).getResultList();
}
它 returns Entity 对象的内容符合预期...有人知道为什么会这样吗?
关于我需要做什么的更多细节:EmployeeTask table 包含员工执行的所有任务。 EmployeeTaskPK 是字符串 empcode,字符串 taskcode,date since。我想在我的实体实例中获取给定 empcode 的所有记录,并将它们列在 jsf datatable.
上谢谢,
问题不在 jpa 中,而是在数据库列定义中,如果您希望您的列是固定大小 CHAR
,或者在这种情况下 NCHAR
,这就是您想要的。
问题是当你有一个像“5091”这样的长度较小的字符串时,它的大小只有 4: 你将在 db 中得到的是“5091”,最后有四个空格。
查询不会 return 你的行,因为带空格的“5091”与不带空格的“5091”不同,唯一正确工作的是 like '5091%'
您可以通过使用 NVARCHAR
来解决 trim 长度较短的字符串或在查询中需要的地方添加空格(对我来说这似乎是一种不好的做法)
public List<EmployeeTask> getEmployeeById(){
return em.createQuery("SELECT a FROM EmployeeTask a where a.id.empcode = '5091 '" ).getResultList();