2012-01-30 66 views
2

我有一个名为实体“航向对接”:Hibernate的HQL加盟非映射表

@Entity 
public class Kurs { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long kursId; 
    private String name; 
    //Accessors.... 
} 

而且也被称为“驾驶员学校”的实体:

@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.... 
} 

现在即时通讯建设KursDao,即将有一个方法来获取kategoriId的Kurs列表。但我无法让加入为我工作。 使用到SQL我通常会认为查询应该是这样的:

getHibernateTemplate().find("from Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?", kategoriId); 

但这并不工作,我不能让这样的事情工作。我不想创建一个KursKategori类,因为它只是一个映射表。 有没有办法将非映射表KursKategori连接到映射表kurs,所以我只会得到正确Kategori中的Kurs?

+0

你得到的错误是什么?你的数据库如何部署? – 2012-01-30 18:30:47

+0

意外标记:在第1行第67列ON [来自no.dahlsdata.model.Kurs.Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId =?] – user829237 2012-01-30 18:33:24

+0

它不像我的ON关键字。我也尝试过不同的变化。例如。使用旧式连接(来自kurs k,kurskategori kk,其中kk.kursId = k.kursId和kk.kategoriId =?),但这只是给出kurskategori未映射的错误。但我不想映射kurskategori。我只是想加入我的反对。 – user829237 2012-01-30 18:35:21

回答

9
运行SQL查询

在HQL中,您只能加入实体之间的映射关系。然而,你有这样的关系,所以你可以使用它:

select kurs from Kategori kat join kat.kursList kurs where kat.kategoriId = ? 
+0

太好了。谢谢哥们!只是我在找:) – user829237 2012-01-30 20:43:15

+1

让我们假设你想选择_kat_而不是_kurs_。这意味着您不需要访问_kurs_表,但生成的sql查询确实在该表上包含连接。你怎么能阻止呢?查询只需要_kat_表和连接表。 – T3rm1 2012-11-09 11:45:48

0
getHibernateTemplate().find("from Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?", kategoriId); 

你不能对KursKategori,这是不处于休眠映射表HQL查询..

要么你可以通过Hibernate模板或查询像这样

select kurs from kategori k join fetch k.kursList where k.kategoriId = ? 
0

你可以创建一个这样的查询,并将工作。

from Kurs k, KursKategori kk where k.kursId = kk.kursId AND kk.kategoriId = ?