没有Q-class时如何用QueryDSL删除?

How to delete with QueryDSL when there is no Q-class?

我有以下内容:

@Entity
public class Step {
...
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name = "InfoType")
@MapKeyEnumerated(EnumType.STRING)
@CollectionTable(name = "Info", joinColumns = @JoinColumn(name = "StepId"))
@Column(name = "Value", length = 100)
private Map<InfoType, String> infos = new HashMap<>();
...
}

InfoType class 只是一个枚举。

在转换为 table、Step 和另一个 table Info 的数据库中。 Info table 有一个指向 Step.

的外键

我想做的是通过查询删除Step条记录。首先,由于 FK,我需要从 Info table 中删除,但是 Info 没有生成 Q-class。有没有办法用 QueryDSL 编写此类查询?

@ElementCollection 注释操作总是级联的。当您删除 Step 实体时,操作会级联到 @ElementCollection.

但是,级联操作只有在通过EntityManager进行操作时才有效。如果您尝试通过自定义查询批量删除实体,则不会级联操作。

可能的解决方案是获取要删除的所有 Step 个实体,然后为每个实体调用 delete 方法。