java - Spring Data JDBC 反转 OneToMany 导航

标签 java spring-data mapping one-to-many spring-data-jdbc

我有一个现有的数据方案,但我不愿意更改。有两个实体/表:parentchild ,子级具有外键列 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 invert OneToOne navigation

最佳答案

Spring Data 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 并设置反向引用。

关于java - Spring Data JDBC 反转 OneToMany 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107015/

相关文章:

c# - Mapster - 如何忽略空属性的映射

java - 设置在另一个类中分配的私有(private)变量的问题

java - Spring Boot jpa接口(interface)-进行自定义查询

java - 带有分页的 Spring-Data FETCH JOIN 不起作用

java - MongoDB Spring数据,复杂条件下的最大聚合

java - Hibernate 与连接表的映射异常

database - NiFi 中数据库的映射表

java - 从 JsonObject 中的 Json 中删除键

java - java程序的编译

java - 获得所需的结果集后关闭连接对象