我正在使用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来实现这一目标?
答案 0 :(得分:0)
在查询中使用“ WITH”子句指定join的条件。请参阅下面的查询
query =“ SELECT DISTINCT f从表格f左外连接f.instructionGroups g左外连接g.i的指令i.deleted = 0