Spring 数据 JDBC 反转 OneToMany 导航
Spring Data JDBC invert OneToMany navigation
我有一个我不愿意更改的现有数据方案。有两个 entities/tables:parent
和 child
,其中 child 具有外键列 parent_id
。是1(parent)-to-n(children)的关系。
是否有可能在 Spring 数据 JDBC 中有 Child
class 参考 Parent
而不是 Parent
有 Set<Child>
属性?也许两者都有? (我知道休眠是可能的,但我想继续使用 JDBC)。
即我想要这样的东西:
@Data
public class Parent {
@Id
private Long id;
}
@Data
public class Child {
@Id
private Long id;
private Parent parent;
}
有点相关的问题:
Spring 数据 JDBC 不直接支持从 Child
到 Parent
的引用。如果您将 Parent
和 Child
建模为一个聚合,即使用直接引用,则 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
并设置后向引用。
我有一个我不愿意更改的现有数据方案。有两个 entities/tables:parent
和 child
,其中 child 具有外键列 parent_id
。是1(parent)-to-n(children)的关系。
是否有可能在 Spring 数据 JDBC 中有 Child
class 参考 Parent
而不是 Parent
有 Set<Child>
属性?也许两者都有? (我知道休眠是可能的,但我想继续使用 JDBC)。
即我想要这样的东西:
@Data
public class Parent {
@Id
private Long id;
}
@Data
public class Child {
@Id
private Long id;
private Parent parent;
}
有点相关的问题:
Spring 数据 JDBC 不直接支持从 Child
到 Parent
的引用。如果您将 Parent
和 Child
建模为一个聚合,即使用直接引用,则 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
并设置后向引用。