【发布时间】:2019-10-18 21:50:47
【问题描述】:
我正在使用 JPA 来返回结果集,但是想要排除已删除 = true 的指令(加入到组然后形成)。
我会在命名查询中使用 ON 子句,但它会导致休眠异常,因为我们正在运行的版本不支持它(升级它目前不是一个选项)。此外,JPA 的版本也不允许通过标准构建器完成此操作。
@NamedQuery(name = "Form.findAllForms", query="SELECT DISTINCT f FROM Form f LEFT OUTER JOIN f.instructionGroups g LEFT OUTER JOIN g.instructions i")
// .. ON i.deleted = false
public class Form implements Serializable {
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "form_id", nullable = false)
@OrderColumn(name = "sortOrder")
private List<InstructionGroup> instructionGroups = new ArrayList<>();
public class InstructionGroup implements Serializable {
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "instructionGroup_id", nullable = false)
@OrderColumn(name = "sortOrder")
private List<Instruction> instructions = new ArrayList<>();
public class Instruction implements Serializable {
private boolean deleted;
使用 WHERE 子句也不起作用,因为它不再返回带有已删除指令的表单,因为我需要在连接阶段应用我的条件。我最好的选择是编写本机 SQL 并使用它,还是我可以坚持使用 JPA 来实现这一目标?
【问题讨论】:
-
看起来你想要的是一个软删除机制,所以虽然这不能直接回答你的问题,但你可能会发现the following link很有用
标签: java hibernate jpa persistence jpql