我想在我的域/实体对象中执行类似的操作:
@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是否更快......?
答案 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很小。