我有一个现有的数据方案,但我不愿意更改。有两个实体/表:parent
和child
,子级具有外键列 parent_id
。这是一个 1(父)到 n(子)的关系。
Spring Data JDBC 中是否可以有 Child
类引用Parent
而不是Parent
有一个Set<Child>
属性(property)?也许两者都有? (我知道使用 hibernate 是可能的,但我想继续使用 JDBC)。
即我想要这样的东西:
@Data
public class Parent {
@Id
private Long id;
}
@Data
public class Child {
@Id
private Long id;
private Parent parent;
}
最佳答案
Spring Data 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
并设置反向引用。
关于java - Spring Data JDBC 反转 OneToMany 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107015/