0

我有一个自反关联的表:

容器可以关联到父级(列 container_id)。容器可以将容器作为子容器。

@Entity
public class Container implements Serializable {

  @ManyToOne
  @JoinColumn(name = "container_id", nullable = true, referencedColumnName = "original_id")
  private Container containedIn;

  @Column(name = "original_id")
  private long originalId;

  @OneToMany(mappedBy = "containedIn")
  private List<Container> contains = new ArrayList<>();

... 

问题:

生成的请求是:

  Hibernate: select * from ( 
  select *  
  from container con0_, container con1_ 
  where con0_.container_id=con1_.original_id 
  order by con1_.code ) where rownum <= ?

我期待左外连接的地方:

from container con0_ left outer join container con1_ 
      on con0_.container_id=con1_.original_id.

没有父容器(根盒 CON0000007)的容器不会被检索,因为左连接不是由 Hibernate 生成的:

身份证 | ORIGINAL_ID| 代码 | 类型 | CONTAINER_ID(父)

1 | 2 | CON000000002 | 包装 | 12

2 | 4 | CON000000004 | 包装 | 10

4 | 6 | CON000000006 | 包装 | 11

5 | 8 | CON000000008 | 包装 | 10

7 | 10 | CON0000002 | 盒子 | 15

8 | 11 | CON0000003 | 盒子 | 15

9 | 12 | CON0000004 | 盒子 | 15

12 | 15 | CON0000007 | 根盒 | 无效的

4

1 回答 1

0

模型看起来不错。看起来您没有在查询中加载子级别。默认情况下你有延迟加载,所以休眠不会查询孩子。如果是这种情况,请在此处查看示例Hibernate:提取所有惰性集合的最佳实践

于 2016-03-30T07:30:03.777 回答