休眠:在没有初始化的情况下从集合中删除项目

时间:2015-06-03 17:45:17

标签: hibernate collections many-to-many

我遇到了Hibernate Many To Many Collection的麻烦。 当我尝试从关系中删除一个项目时,hibernate会加载整个集合(太大了)。 这是一个例子:supose 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()时,hibernate会加载整个集合。 反正有没有避免这个?我只是想从连接表中删除该行。

我尝试过: @BatchSize限制收集大小,但最后我明白它并没有像我预期的那样工作。

@LazyCollection(LazyCollectionOption.EXTRA),没有工作

1 个答案:

答案 0 :(得分:0)

如果A和B之间的关系是双向的,则获取B,然后更新它改变其A的值,使该值为null或其他值。 这样的事情:

B b = bService.getBById(id);
b.setA(null); // or b.setA(anotherValueOfA);
bService.update(b);

它应该有用