java - 使用 JPA 使用 @ElementCollection 从 @CollectionTable 中删除条目
问题描述
我有一个像下面这样的实体。它被简化了,因为我无法发布原始代码,但它应该足以理解这个想法。
重点是:
使用EntityManager
I 可以删除表中的条目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<>();
}
解决方案
@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();
}
推荐阅读
- python-3.x - 如何在不知道 Python 中哪个更大的情况下获取两个值之间的值列表?
- mysql - 在laravel 6中搜索由空格分隔的多个单词不起作用
- c# - 如何使用一段代码处理Asp.net core上的所有Http请求
- list - 使用列表视图设置视图背景颜色时遇到问题--SwiftUI
- angular - 如何在最新的 Ionic 上使用 ReactiveForms
- java - 将新的 utm 参数附加到 Spring Security Filter 中的 URL
- pine-script - 松树脚本 - 如果条件为真,则在前 6 支蜡烛中绘制三角形 2 次
- javascript - 有没有办法在 Office.js Excel 插件中更改线条形状的颜色?
- formal-verification - 您如何正式验证“没有算术或其他异常”?
- unix - 使用 sed 提取特定的分隔字段