关于Hibernate出现illegal attempt to dereference collection..的错误处理

今天使用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对象,这样问题就解决了 :)

发表评论

电子邮件地址不会被公开。 必填项已用*标注