具有约束的Hibernate急切/延迟加载

时间:2014-06-18 03:51:52

标签: java hibernate lazy-loading

ClassA {

 @Id
 @GeneratedValue
 @Column(name = "a_id")
 private long id;

 @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "classA")
 private Set<ClassB> classBs;

}

ClassB {

 @ManyToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "a_id")
 private ClassA classA;

 @JoinColumn(name = "size")
 private int size;

}

如果在加载/延迟加载时,如何向ClassA的classB添加约束?

例如,我只想加载ClassB,其中size&gt; 10进入ClassA&#39的Set classBs。

我知道我可以使用注释@OrderBy(value =&#34; size ASC&#34;)来订购Set,但是我可以添加除Order之外的约束吗?

我可以使用Hibernate实现吗?

我能够在Laravel(PHP框架)中完成。 http://laravel.com/docs/eloquent#eager-loading中的热切负载约束。

2 个答案:

答案 0 :(得分:1)

看看Hibernate Filters
Documentation
Sample
您应该注意一件事,那就是过滤器不会永久地应用于实体,您需要在需要时启用它们:

session.enableFilter("myFilter");

答案 1 :(得分:0)

查看FilterFilterDef,此处为documentation

  • 在classB侧定义FilterDef条件
  • 在classA&#39的关系中,使用Filter,其名称是指在classB方面定义的过滤器。

例如,请查看此answer