java - Hibernate Persistencebag 从列表中删除元素

标签 java mysql hibernate jakarta-ee arraylist

我有两个实体:

第一个:

    @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/

相关文章:

java - 如何将完整的查询字符串传递给@Query?

java - 在 map 上绘制轨迹代号一

mysql - 在 MySQL 中创建触发器来记录数据库中的更改

mysql - 查询列表成绩为b的学生

mysql - 获取mysql中连续日期的计数

java - 出现错误 --- 无法对 PLSQL 语句执行 fetch : next

java - 创建单元测试用例时无法将 @Autowired 与 @Mock 一起使用

java - 是否有等同于 "java.awt.headless=true"的 SWT?

java - 如何删除 json 中不需要的细节

java - 无法找到逻辑名称为 : product 的列