Spring 数据 JDBC 反转 OneToMany 导航

Spring Data JDBC invert OneToMany navigation

我有一个我不愿意更改的现有数据方案。有两个 entities/tables:parentchild,其中 child 具有外键列 parent_id。是1(parent)-to-n(children)的关系。

是否有可能在 Spring 数据 JDBC 中有 Child class 参考 Parent 而不是 ParentSet<Child> 属性?也许两者都有? (我知道休眠是可能的,但我想继续使用 JDBC)。

即我想要这样的东西:

@Data
public class Parent {
    @Id
    private Long id;
}
@Data
public class Child {
    @Id
    private Long id;

    private Parent parent;
}

有点相关的问题:

Spring 数据 JDBC 不直接支持从 ChildParent 的引用。如果您将 ParentChild 建模为一个聚合,即使用直接引用,则 Parent 必须是聚合根。因此任何 child 始终只能通过 Parent 访问。因此,反向引用应该是多余的。

实际上,希望有一个反向引用可能表明这两者并没有真正形成一个单一的聚合,而是分开的聚合,应该这样建模。参见 https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates

但是如果你真的想要你的反向引用,你可以很容易地 establish that in an AfterLoadCallback。 为此,用 @Transient annotation 标记反向引用,这样它就不会实际存储在数据库中。 然后在 AfterLoadCallback 中,每个 Parent 都会触发一次,从 Parent 导航到每个 Child 并设置后向引用。