首页 > 解决方案 > 使用 JPA 使用 @ElementCollection 从 @CollectionTable 中删除条目

问题描述

我有一个像下面这样的实体。它被简化了,因为我无法发布原始代码,但它应该足以理解这个想法。

重点是:

使用EntityManagerI 可以删除表中的条目my_table。到目前为止,一切都很好。现在我还需要删除条目,my_mapping_table但我不知道该怎么做。

使用上述EntityManager可能不起作用,因为该字段不是Entity.

有什么想法可以从该表中删除条目或截断它吗?

@Data
@NoArgsConstructor
@Entity
@Builder
@AllArgsConstructor
@Table(name = "my_table")
public class MyTable {

    @ElementCollection(targetClass = SomeClass.class)
    @CollectionTable(name = "my_mapping_table", joinColumns = @JoinColumn(name = "id_1", referencedColumnName = "id_2"))
    @Column(name = "someclass_enum")
    @Convert(converter = SomeClassConverter.class)
    private Set<SomeClass> setOfSomeClass = new HashSet<>();
}

标签: javajpa

解决方案


@ElementCollection通过其父实体进行管理。要删除它们,您必须先获取其父实体,然后简单地清除集合。

首先在 MyTable 上创建一个方法来清除其所有 ElementCollection :

@Entity
public class MyTable {

    public void removeAllSomeClass(){
          this.setOfSomeClass.clear();
    }
}

要删除特定 MyTable 记录的所有 ElementCollection :

MyTable row1 = entityManager.find(MyTable.class,1);
row1.removeAllSomeClass();

因此,要从以下截断所有条目my_mapping_table

for(MyTable tbl : em.createQuery("from MyTable", MyTable.class).getResultList()){
  tbl.removeAllSomeClass();
}

推荐阅读