没有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 方法。
我有以下内容:
@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 方法。