代码之家  ›  专栏  ›  技术社区  ›  K.Nicholas

JPA和ManyToMany递归关系产生了错误的查询

  •  1
  • K.Nicholas  · 技术社区  · 7 年前

    在Hibernate版本5中,我有一个带有递归 ManyToMany 当我做一个 join fetch 在关系上,我得到一个带有两个连接的查询。我认为只需要一次加入。你知道为什么会生成两个连接,或者如何修复它吗?

    @Entity
    public class Employee implements Comparable<Employee> {
        @Id Integer id;    
        @ManyToMany
        protected Set<Employee> opinionCitations;
        // getters, setters
    }
    

    em.createQuery("select distinct e from Employee e left join fetch e.opinionCitations").getSingleResult();
    

    给了我

    select distinct 
        employee0_.id as id1_0_0_, 
        employee2_.id as id1_0_1_, 
        opinioncit1_.Employee_id as Employee1_1_0__, 
        opinioncit1_.opinionCitations_id as opinionC2_1_0__ 
    from 
        Employee employee0_ 
        left outer join Employee_Employee opinioncit1_ on employee0_.id=opinioncit1_.Employee_id 
        left outer join Employee employee2_ on opinioncit1_.opinionCitations_id=employee2_.id
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Kayaman    7 年前

    不,没什么问题。它连接 Employee 带有链接表的表 Employee_Employee 然后回到 受雇者 。就像你期望的那样 @ManyToMany

    使用 @OneToMany 您可以只使用一个连接,因为它不需要链接表,但这样您就有了一个可能不是您想要的树结构。