我有两个实体:
第一个:
@Entity
public class A{
@OneToMany(mappedBy = "a", targetEntity = B.class, ...)
@LazyCollection(LazyCollectionOption.FALSE)
private List<B> b;
getter and setter
}
第二个:
@Entity
public class B{
@ManyToOne(targetEntity = A.class, ...)
@JoinColumn(name = "aId",...)
private A a;
现在我从数据库中读取数据,我想删除一些元素:
List<B> bList = a.getB();
for(B b: bList)
if(some condiction)
bList.remove(b)
为什么我不能? 为什么 bList 是 persistanceBag 而不是 ArrayList? 如何从 bList 中删除项目? 为什么我在 Debug模式中只能看到一个项目?
谢谢 奶酪
最佳答案
Hibernate 使用代理列表来实现 LAZY 初始化并拦截列表上发生的任何更改,这就是它用自己的 PersistenceBag
实现替换 ArrayList
的原因。
只需将孤儿移除添加到您的一对多关联中:
@OneToMany(mappedBy = "a", targetEntity = B.class, orphanRemoval = true)
private List<B> b = new ArrayList<>();
然后从列表中删除元素:
B toBeRemoved = ...;
a.b.remove(toBeRemoved);
toBeRemoved.a = null;
关于java - Hibernate Persistencebag 从列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019856/