今天使用Hibernate查询某个实体时出现标题中所示的错误,百思不得其解,查阅资料后发现,这个问题是因为Hibernate的版本问题造成的,具体原因见这里。
在我的项目中,两个实体类AppUser与AppRole,AppUser类中有一个List<AppRole>d的属性用来存放此用户的角色。我现在想要做的是通过AppRole的rname查询出这个权限下所有的AppRole。我定义了命名查询:
[codesyntax lang=”xml”]
<query name="UserDao.findByRoleName"> <![CDATA[ select u from com.kaisir.tms.pojo.AppUser as u where u.AppRoles.rname=:rname ]]> </query>
[/codesyntax]
可是查询出现了标题中的错误,查阅资料,后期版本的Hibernate必须“显式”的指定子查询,不会再自动的添加隐含的查询了,故将定义修改如下:
[codesyntax lang=”xml”]
<query name="UserDao.findByRoleName"> <![CDATA[ select u from com.kaisir.tms.pojo.AppUser as u inner join fetch u.appRoles r where r.rname=:rname ]]> </query>
[/codesyntax]
这样我显式的告诉Hibernate先去查询AppUser中的appRoles属性,然后再从属性中查询其rname为指定值的AppUser对象,这样问题就解决了 :)