我有一个名为"Kurs"的实体:
@Entity
public class Kurs {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long kursId;
private String name;
//Accessors....
}
Run Code Online (Sandbox Code Playgroud)
还有一个名为"Kategori"的实体:
@Entity
public class Kategori {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long kategoriId;
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable (name = "KursKategori", joinColumns = {@JoinColumn(name = "kategoriId")}, inverseJoinColumns = {@JoinColumn(name = "kursId")})
private List<Kurs> kursList;
// Accessors....
}
Run Code Online (Sandbox Code Playgroud)
现在我正在构建一个KursDao,它将有一个方法来获取kategoriId的Kurs列表.但我无法让联盟为我工作.习惯于SQL我通常会认为查询应该是这样的:
getHibernateTemplate().find("from Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?", kategoriId);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我不能得到这样的东西工作.我不想创建一个KursKategori类,因为它只是一个映射表.有没有办法将非映射表KursKategori连接到映射表kurs所以我只会得到正确的Kategori中的Kurs?
axt*_*avt 11
在HQL中,您只能加入实体之间的映射关系.但是,你有这样的关系,所以你可以使用它:
select kurs from Kategori kat join kat.kursList kurs where kat.kategoriId = ?
Run Code Online (Sandbox Code Playgroud)
从 Hibernate 5.1 开始,您可以 JOIN 映射实体而无需关联。
所以,现在应该可以了:
SELECT k from Kurs as k
JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17033 次 |
| 最近记录: |