【问题标题】:Deleting entries from @CollectionTable with @ElementCollection using JPA使用 JPA 使用 @ElementCollection 从 @CollectionTable 中删除条目
【发布时间】:2019-08-31 14:05:14
【问题描述】:

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

重点是:

使用EntityManager,我可以删除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<>();
}

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    @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();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2012-10-24
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多