【发布时间】:2015-06-03 17:45:16
【问题描述】:
我在使用 Hibernate 多对多集合时遇到了问题。 当我尝试从关系中删除一个项目时,休眠加载整个集合(太大)。 这是一个例子:假设 A 与 B 有多对多关系
public class A {
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH }, fetch = FetchType.LAZY)
@JoinTable(name = "a_b", joinColumns = { @JoinColumn(name = "a_id", referencedColumnName = "id", unique = false) }, inverseJoinColumns = { @JoinColumn(name = "b_id", referencedColumnName = "id", unique = true) })
@Sort(type = SortType.COMPARATOR, comparator = AscBComparator.class)
private List<B> listB;
public List<B> getListB() {
return listB;
}
}
// in other part
A.getListB().remove(concreteB);
当程序到达 A.getListB() 时,休眠加载整个集合。 有没有办法避免这种情况?我只想从连接表中删除该行。
我尝试过: @BatchSize 来限制 de collection 的大小,但最后我明白它并没有像我预期的那样工作。
@LazyCollection(LazyCollectionOption.EXTRA),没用
【问题讨论】:
-
为什么不直接删除B呢?
-
因为 B 仍然是我的域的一部分,我无法删除它。只是 B 不再与 A 相关。
标签: hibernate collections many-to-many