解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误

在项目中,会遇到一对多的实体关系映射,而恰恰又要查出关联的实体属性,在HQL中使用join语句关联两个实体对象,如下代码:

1 select new CustomerRequirement(c.pName,c.salesMan,c.pDate) from CustomerRequirement c inner join c.requirementDeatils r on c = c.requirementDeatils.customerRequirement

运行发现报如下错误:

org.hibernate.QueryException illegal attempt to dereference collection

这是因为在上面的HQL语句中,CustomerRequirement的关联实体requirementDeatils是一个Set集合,而不是一个实体。在 Hibernate3.2.2以前的版本,Hibernate会对关联实体自动使用隐式的inner join,也就是说使用上面的HQL语句是毫无问题的。

但是在Hibernate3.2.2版本以后,Hibernate改变了这种策略。它使用如下策略来关联实体。

同样对于上面的HQL语句。如果requirementDeatils是一个单个的关联实体或者是一个普通的属性,那么hibernate就会自动使用隐式的inner join。但是如果requirementDeatils是一个集合,那么就会出现org.hibernate.QueryException illegal attempt to dereference collection异常,对于解决方案就是,要么退回hibernate3.2.2版本以前,要么使用如下形式的HQL语句:

select new CustomerRequirement(c.pName,c.salesMan,c.pDate) from CustomerRequirement c inner join fetch c.requirementDeatils r on c = c.requirementDeatils.customerRequirement
时间: 2024-11-06 13:43:23

解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误的相关文章

【Hibernate】Illegal attempt to associate a collection with two open sessions

今天在用Hibernate对对象进行修改操作的时候报了这个错. 之前一直没什么错误,但是今天修改了一下表结构,增加了一个OneToMany的映射. 所以在我获取对象,重新set一个变量之后就报了这个错误了. Illegal attempt to associate a collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associa

解决xorm逆向mssql报datetime2不兼容的异常错误

xorm作为golang开发者的一大利器,深受大家的喜爱,可是最近在逆向mssql的时候,报了这么一个错误: 最后找了半天发现xorm没有预置DateTime2类型,经过几番折腾,在xorm源码的engine.go中增加了这么一个类型,终于搞定了这种蛋疼的问题,看结果: 好了,写下来记录一下.遇到同样问题的同学,可以直接赋值xorm.exe到bin/文件下替换原来的文件 https://pan.baidu.com/s/1gfeY6kj   密码:pezu

weblogic 下异常 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

项目之前在 Tomcat 环境下一直都正常运行,今天应客户要求需要迁移到 webLogic 10.3.6 下, 部署后竟然抛出了 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken 异常,经过一番搜索后弄明白了问题的产生原因及解决方法. 问题原因 Hibernate3 采用新的基于 antlr 的 HQL/SQL 查询翻译器,在 hibernate3 中需要用到 antlr,然而

Atitit.解决org.hibernate.DuplicateMappingException: Duplicate class/entity mapping

Atitit.解决org.hibernate.DuplicateMappingException: Duplicate class/entity mapping 1. 排除流程::: @Deprecated public class HibernateSessionFactory { static { try { configuration.configure(propertyFile); sessionFactory = configuration.buildSessionFactory();

atitit. 解决org.hibernate.SessionException Session is closed

#--现象:: org.hibernate.SessionException Session is closed 一呱走中个. #--原因 2.eichkyeu  e, log hteu yva parse token e...  cheocho sh   from>form 3.saecyeu e .... 4.    Query cq = ss.createSQLQuery(checkHql);>>> Query cq = ss.createQuery(checkHql); b

同时操作两个数据库:报错Illegal attempt to associate a collection with two open sessions

今天我在一个操作两个数据库的SSH里 同时插入1条数据 报错 Illegal attempt to associate a collection with two open sessions 在这里有答案:http://fuaotech.iteye.com/blog/1298826 使用hibenate的merge方法代替save.update等方法. merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供

解决:hibernate+mysql中文查询不出结果,SQL语句也正常

今天做一个项目挣点外快hibernate+mysql数据库,Java后台全部正常,查看Java想数据库发送的语句也是正常的,但是中文就是查询不出结果,中文在Java中没有乱码,用new String(or_name.getBytes("ISO-8859-1"), "UTF-8"); 后台没有乱码,尝试了网上的很多方法都不行,getString或者getParamter都不行 最后感觉是mysql的问题,然后将mysql的安装目录下的my.ini中的两个地方改为utf

[转] Hibernate不能自动建表解决办法(hibernate.hbm2ddl.auto) (tables doesn't exist)

转自: http://blog.csdn.net/biangren/article/details/8010018 最近开始学Hibernate,看的是李刚的那本<轻量级java ee企业应用实战>.头一个hibernate程序,我原原本本的按照书上例子写下来,同时只是改动了些mysql的连接参数,并且在mysql中新建了一个hibernate数据库,仅此而已.然而预想不到的事情发生了……程序写好之后,运行,报错 Hibernate: insert into news_table (title

【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

前言 最近开发项目比较忙,springcloud的笔记得稍稍放放了,下午出来个bug,恶心的不行,功能很简单,也没有什么级联或复杂的映射关系,就是一直在报三个异常 Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no propert