简单的hql命名查询,它使用内连接

时间:2011-10-27 09:33:51

标签: java hibernate hql inner-join

我想在我的域/实体对象中执行类似的操作:

@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就是这样,它在我的db命令提示符下工作正常:

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 objects / dto是否更快......?

2 个答案:

答案 0 :(得分:3)

我认为这可能对您有用,但我猜测您的Usercat类:

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

答案 1 :(得分:1)

案例问题,正确的查询将是:

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

注意:Cat中的C是大写,Usercat中的U是大写,其中Usercat中的c很小,而isfavourite中的f很小。