简单的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就是这样,它在我的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是否会更快……?

我认为这可能适合你,但我猜你的Usercat类:

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

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

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

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