简单的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很小。
- struts2 + hibernate3 + jasper-report 5.0 —得到空白报告
- sessionfactory.openSession()和sessionfactory.openStatelessSession()之间的区别?
- Hibernate实体autowire
- 在Hibernate中更改外键的生成名称
- Hibernate抛出HibernateQueryException:无法解析属性
- 自动连接到hibernate拦截器
- 理解hibernate中的session.get vs session.load方法
- Java ETL过程
- CrudRepository和Hibernate:在事务中保存(List
)vs save(Entity)