2011-10-27 140 views
1

我想要做這樣的事情在我的域/實體對象:使用一個內部簡單的HQL命名查詢加入

@Entity 
@NamedQueries({ 
@NamedQuery(name="favouriteCats", query="from Cat c inner join on UserCat uc where uc.isFavourtie = true and uc.user = :user") 
}) 
public final class Cat extends BaseTable 

所以,在我的服務層,我可以做到這一點:

Query query = session.getNamedQuery("favouriteCats") 
query.setParameter(0, MyUser); 
return query.list(); 

然而,我在HQL中的語法是不正確的 - 下午十分鐘看着官方文檔,我決定放棄並在這裏問......? 我usercat表加入像這樣:

@ManyToOne(cascade = CascadeType.MERGE) 
@JoinColumn(name="cat_fk", insertable=false, updatable=false) 
private cat 

的SQL是這樣的,它工作正常,在我的數據庫命令提示符:

select c.* 
from cat as c inner join usercat as uc on c.id = uc.cat_fk 
and uc.isFavourite = 1 //bit field 
and uc.user_fk = 74 //just user id 

難道只是我或者是Hibernate文檔比較痛苦,你是否發現自己經常想知道只是編寫正常的jdbc預處理語句來填充你的pojos/domain對象/ dto的是否會更快?

+0

什麼是你想通過這個查詢來實現呢? – axtavt

+0

@axtavt傳入用戶ID,查找usercat表中所有收藏的貓,這些貓加入到cat表中 – NimChimpsky

+0

爲什麼不直接使用SQL代替HQL,方法是session.createSQLQuery(query); –

回答

3

我認爲這可能爲你工作,但我在這裏猜你Usercat類:

select c from Usercat as uc inner join uc.cat as c where uc.isFavourtie = true and uc.user = :user 
+0

thnx,相應的標準是什麼樣的? – NimChimpsky

+0

我不知道你是否可以用Criteria做到這一點,而不需要從Cat到Usercat的參考。 – col

+1

它似乎不是,沒有答案在這裏http://stackoverflow.com/q/7914607/106261我有時想知道hibernate是否值得它(它正在學習新的語法,安裝一堆罐子等等) – NimChimpsky

1

案例問題,請右鍵查詢應爲:

from Cat c inner join on Usercat uc where uc.isfavourtie = true and uc.user = :user 

注:C在貓是資本,U在Usercat是京城裏爲c在Usercat是isfavourite小和f小。