【问题标题】:JPQL does not have a condition following the "on" keywordJPQL 在“on”关键字之后没有条件
【发布时间】:2021-11-23 09:26:40
【问题描述】:

我有一个与Allele 多对一的Motif 类和一个与Locus 多对一的Allele 类。

public class Motif {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

---- another attributes ----

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "allele_id")
    private Allele allele;
}
public class Allele {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "allele")
    private Float allele;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "locus_id")
    private Locus locus;

    @OneToMany(mappedBy = "allele", cascade = CascadeType.ALL)
    private List<Motif> motifs;
}
public class Locus {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "locus")
    private String locus;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "kit_id")
    private Kit kit;

    @OneToMany(mappedBy = "locus", cascade = CascadeType.ALL)
    private List<Allele> alleles;
}

我用 JPQL 查询了这个查询。

SELECT m FROM Motif m JOIN Allele a JOIN Locus l WHERE a.allele = :allele AND l.locus = :locus ORDER BY m.seqNo

它会抛出一些语法异常。因此,我启用了用于显示 SQL 的日志。我看到了。

    select
        motif0_.id as id1_9_,
        motif0_.allele_id as allele_i5_9_,
        motif0_.pattern as pattern2_9_,
        motif0_.range_seq as range_se3_9_,
        motif0_.seq_no as seq_no4_9_ 
    from
        motif motif0_ 
    inner join
        allele allele1_ 
            on 
    inner join
        loci locus2_ 
            on 
    where
        allele1_.allele=? 
        and locus2_.locus=? 
    order by
        motif0_.seq_no

为什么on关键字后面没有条件?

提前谢谢你。我尝试搜索了很多此类问题,但没有找到任何解决方案来解决我的问题。

【问题讨论】:

    标签: spring spring-boot hibernate spring-data-jpa jpql


    【解决方案1】:

    JPQL 连接查询应如下所示:

    SELECT m FROM Motif m JOIN m.allele a JOIN m.locus l WHERE a.allele = :allele AND l.locus = :locus ORDER BY m.seqNo
    

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 2012-06-07
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多