使用中遇到此问题,网上搜索是版本的问题!
illegal attempt to dereference collection(hibernate中的一个易错地方)
原创
©著作权归作者所有:来自51CTO博客作者业渠的原创作品,请联系作者获取转载授权,否则将追究法律责任
例如:
from Department as d where d.employees.name='Tom';
运行时出现异常:org.hibernate.QueryException: illegal attempt to dereference collection
是因为:在上面的HQL语句中,Department的关联实体employees是一个集合,而不直接是一个Employee实体。
在Hibernate3.2.2以前的版本,Hibernate会对关联实体自动使用隐式的inner join,
也就是说如下SQL语句不会有任何问题 :from Department as d where d.employees.name='Tom';
从Hibernate3.2.3以后,Hibernate改变了这种隐式的inner join的策略
对于如下这条语句:
from Department as d where d.employees.name='Tom';
如果employees是普通组件属性,或单个的关联实体,则Hibernate会自动生成隐式的inner join
如果myEvents是也一个集合,那么对不起!系统将会出现 org.hibernate.QueryException: illegal attempt to dereference collection异常。
据Hibernate官方说法:
这样可以让这使得隐含关联更具确定性(原文:This makes implicit joins more deterministic )。
推荐这样写:
from Department as d inner join fetch d.employees e where e.name='Tom';

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一个简洁、干净的中后台管理模板
nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。
后台管理 后台管理模板 vue node.js npm -
hibernate的lazy中的一个extra属性
hibernate的lazy中的一个extra属性是不大容易重视的,其实它和true差不多,但
hibernate sql 数据 加载 -
apusic的一个注意的地方
最近打算从TOMCAT迁移到国产货apusic,但居然部署时,发现有如下的错误:co
servlet tomcat url xml -
hibernate 3中要注意的地方
批量更新和删除 在HIBERNATE 3中,批量更新比2有了很大的改善。 以下是通
hibernate iterator session string delete -
hibernate 缓存中要注意的地方
1 hibernate 中的缓存问题 A 一级缓存和session的生命周期一样的,在比如 S
hibernate session query cache list