使用JPQL加入条件

时间:2019-06-03 10:43:55

标签: java hibernate jpa persistence jpql

我正在使用JPA返回结果集,但是要排除其中delete = 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来实现这一目标?

1 个答案:

答案 0 :(得分:0)

在查询中使用“ WITH”子句指定join的条件。请参阅下面的查询

query =“ SELECT DISTINCT f从表格f左外连接f.instructionGroups g左外连接g.i的指令i.deleted = 0