首页 > 解决方案 > 使用 JoinColumns 时,双向 Hibernate 查询产生 1+ N 个查询

问题描述

父实体具有如下注释:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "a")
private Set<Child> b;

子实体有如下注解:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "col_A")
private Parent a;

通过存储库对 Parent 执行 join FETCH 查询时,例如:

@Query("select a " +
            "from Parent a " +           
            "left join FETCH a.b " +
            "where a.prop = <some_value> ")

查询按预期工作,执行一个返回 A 及其子项的大连接。但是,如果我们按如下方式更改 Child 的注释,则查询开始执行 1+N:

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
           @JoinColumn(name = "COL_A", referencedColumnName = "COL_A"),
            @JoinColumn(name = "COL_B", referencedColumnName = "COL_B")
    })
    private Parent a;

COL_A 是 Parent 的主键,而 COL_B 是用作分区的非键列

标签: hibernatemany-to-onebidirectional

解决方案


推荐阅读