zoukankan      html  css  js  c++  java
  • 解决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
  • 相关阅读:
    王道考研复习-操作系统-进程管理(二)
    王道考研复习-操作系统-计算机系统概述(一)
    Understanding Undefined Behavior
    iOS开发需要掌握的命令
    LLDB命令速查
    Flutter简介
    poj 2115 C Looooops 扩展欧几里得算法
    poj 2635 The Embarrassed Cryptographer ??/Java??(???)
    poj 3292 Semi-prime H-numbers 筛素数(简单题)
    poj 1019 Number Sequence 数学
  • 原文地址:https://www.cnblogs.com/ao-xiang/p/5477902.html
Copyright © 2011-2022 走看看