休眠:在不初始化的情况下从集合中删除项目
Hibernate: Remove Item From Collection Without Initialazing
我在使用 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() 时休眠加载整个集合。
无论如何要避免这种情况?我只想从连接 table.
中删除行
我试过:
@BatchSize 限制 de collection 大小,但最后我明白它没有像我预期的那样工作。
@LazyCollection(LazyCollectionOption.EXTRA),没用
如果A和B之间的关系是双向的,获取B,然后更新它改变它的A的值,使这个值为空或另一个值。
像这样的事情:
B b = bService.getBById(id);
b.setA(null); // or b.setA(anotherValueOfA);
bService.update(b);
它应该可以工作
我在使用 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() 时休眠加载整个集合。 无论如何要避免这种情况?我只想从连接 table.
中删除行我试过: @BatchSize 限制 de collection 大小,但最后我明白它没有像我预期的那样工作。
@LazyCollection(LazyCollectionOption.EXTRA),没用
如果A和B之间的关系是双向的,获取B,然后更新它改变它的A的值,使这个值为空或另一个值。 像这样的事情:
B b = bService.getBById(id);
b.setA(null); // or b.setA(anotherValueOfA);
bService.update(b);
它应该可以工作