我想要做這樣的事情在我的域/實體對象:使用一個內部簡單的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的是否會更快?
什麼是你想通過這個查詢來實現呢? – axtavt
@axtavt傳入用戶ID,查找usercat表中所有收藏的貓,這些貓加入到cat表中 – NimChimpsky
爲什麼不直接使用SQL代替HQL,方法是session.createSQLQuery(query); –