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();