我试图弄清楚我在使用 JPA/Hibernate 时做错了什么。
我有一个包含两个表的数据库:横幅和横幅链接。
banner
+-------------------------------------------+
| id | logo | studyId | textColor | bgColor |
+-------------------------------------------+
| 1 | xx | 17 | green | red |
+-------------------------------------------+
bannerlink
+----------------------------------------+
| id | bannerId| label | text | image |
+----------------------------------------+
| 1 | 1 | About| Abt..| xxx |
+----------------------------------------+
| 2 | 1 | Beta | Bet..| xxx |
+----------------------------------------+
| 2 | 1 | Cont | Ctc..| xxx |
+----------------------------------------+
以及每个实体类
@Entity
@Table(name="bannerlink")
public class BannerLink{
@Id
@GeneratedValue
private int id;
private String label;
@ManyToOne
@JoinColumn(name = "bannerId")
private Banner banner;
...
}
@Entity
@Table(name = "banner")
public class Banner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String logo;
private String textColor;
private String backgroundColor;
private int studyId;
@OneToMany(
mappedBy = "banner",
cascade = CascadeType.ALL,
fetch=FetchType.LAZY,
targetEntity = BannerLink.class
)
private List<BannerLink> links;
public Banner() {
}
...
}
我还定义了一个 DAO。
public interface BannerDAO extends JpaRepository<Banner, Integer> {
@Query("select distinct banner FROM Banner banner join BannerLink bl where banner.studyId = :studyId")
Banner getBannerByStudyId(@Param("studyId") int studyId);
}
但是,当我运行 DAO 方法 getBannerByStudyId 时,我得到一个异常“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本对应的手册以获取正确的语法在第 1 行的“其中banner0_.studyId=17”附近使用”
打印出 Hibernate 生成的 RAW SQL 显示 INNER JOIN ON 子句中缺少参数。
Hibernate:
select
distinct banner0_.id as id1_0_,
banner0_.backgroundColor as backgrou2_0_,
banner0_.logo as logo3_0_,
banner0_.studyId as studyId4_0_,
banner0_.textColor as textColo5_0_
from
banner banner0_
inner join
bannerlink bannerlink1_
on
where
banner0_.studyId=?
任何想法我做错了什么?