【发布时间】: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