Spring 数据JDBC 一对一获取

Spring Data JDBC fetch one to one

我有这个领域模型:

final class Project {

    private final @Id
    @With
    long projectId;

    private final String projectType;

    @With
    private final ProjectRecipient projectRecipient;

    @With
    private final Set<PreCalculationCosts> preCalculationCosts;

    @With
    private final Set<PostCalculationCosts> postCalculationCosts;
}

问题:

当我从 CrudRepository 调用 findById 方法时,属性 projectRecipient 被具体化。
我什至在日志中看到所有已发布的 sql 语句都是必需的。

当我使用自己的 Query 时,只有一对多属性被具体化(没有为一对一相关的项目接收者发布 select 声明):

select p.* from project p 
inner join projectrecipient pr on pr.project = p.projectid
where p.projectid = :projectId

编辑
当我调试 findById 方法并将此生成的 SQL 用作 Query 值时,它以正确的方式实现。问题是,我的 Project table 有很多列,所以 Query 值字符串在我的 IDE(A) ...

另一方面,我不能使用 findById 方法,因为我需要一些特定于 postgres 的 similar to 子句 ...

目前没有其他方法可以拼出完整的 SQL 语句,包括以关系名称和 _ 为前缀的引用实体的列。 如果您不包含这些列,则引用的实体将被视为 null

Spring 数据团队正在考虑启用一种方法来提供除查询的 select 子句之外的所有内容,但由于需要,将这些想法转化为代码需要相当长的时间其他一些重大变化。

请注意,您可以将查询或其部分提取到 static final 值中,这可能更容易理解。

另请注意,您可以将 * 符号与显式列结合使用(至少在我使用的数据库中是这样,所以像这样的东西就可以了:

select p.*, pr.id as recipient_id

当然,这是否是个好主意的问题可能会引起一些争论。