首页 > 解决方案 > 覆盖jpa中的列选择

问题描述

我需要通过左连接实体来选择一个整数列(int)。

当没有行时,它的值为“null”,我需要的是 0 而不是 null。

我搜索了一个注释或一种方法来覆盖没有结果的选择查询。请注意,我使用的是 eclipselink。

我正在寻找总是选择列“coalesce(columnName,0)”而不是 columnName 的东西。

编辑:

代码示例:

public class parent{
 @Id
 private int id;
 private String field1;
 private String field2;
 private List<Child> children;
}

public class Child{
 @Id
 private int id;
 private int myNumber;
 private String field;
}

JPA 查询类似于

SELECT p FROM parent p LEFT JOIN p.children c ON c.field = 'aaa' WHERE p.field1 = 'bbb'

这个查询的翻译是:

SELECT t0.id, t0.field1, t0.field2, t1.id, t1.myNumber, t1.field
FROM parent t0 LEFT OUTER JOIN child t1 on t0.id = t1.parent_id AND t1.field = 'aaaa
WHERE t0.field1 = 'bbb'

在 CHILD 中没有行的情况下,字段:t1.myNumber 的值为 null。

要修复它,在 Sql 语句中,通常我会使用 coalesce(t1.myNumber,0)。所以查询将是:

SELECT t0.id, t0.field1, t0.field2, t1.id, coalesce(t1.myNumber,0), t1.field
FROM parent t0 LEFT OUTER JOIN child t1 on t0.id = t1.parent_id AND t1.field = 'aaaa
WHERE t0.field1 = 'bbb'

我需要的是使用一些注释或任何其他工具(如果存在)来完成这个结果,如果可能的话,不要更改 JPA 查询。

标签: jpajakarta-eeeclipselink

解决方案


推荐阅读