`
longgangbai
  • 浏览: 7339080 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate的一个异常的解决方案

阅读更多

   在项目中使用HQL时的遇有多个类的嵌套比较发生的异常:

错误信息如下:

org.hibernate.hql.ast.InvalidWithClauseException: with-clause expressions did not reference from-clause element to which the with-clause was associated

错误原因:使用类之间的关联太深了,关联不到相关的对象

/**
  * 分页查询 根据查询条件,得到符合条件的订单列表的集合(仅限预定员个人的操作)
  *
  * @param <T>
  * @param vacationorderCondition
  * @param paginater
  * @return
  */
 public <T> Paginater<T> searchPartVacationOrderList(final VacationOrderCondition vacationorderCondition, Paginater<T> paginater) {

  Sorter sorter = paginater.getSorter();
  if (sorter == null || sorter.isEmpty()) {
   sorter = new Sorter().asc("p.createdTime");
  }
  LimitedList<T> limitedList = findByQuery(new QueryCreator() {
   public Query createQuery(Session session) {
    DynamicQuery dquery = new DynamicQuery(" select distinct  v from VacationOrder v ");
    // 机位未确定订单
    if (VacationOrderQueryType.Flight_Unknow_order_list == vacationorderCondition.getQueryType()) {
     dquery.append(" inner join v.flightOrders vf with vf.status  !=" + VacationOrderConfirmStatus.CONFIRM.getCode());
     // 酒店未知订单列表
    } else if (VacationOrderQueryType.Hotel_unknow_order_list == vacationorderCondition.getQueryType()) {
     dquery.append(" inner join v.hotelOrders vh with vh.status !=" + VacationOrderConfirmStatus.CONFIRM.getCode());
     // 未读取传真的订单列表
    } else if (VacationOrderQueryType.UnRead_fax_order_list == vacationorderCondition.getQueryType()) {
     dquery.append(" inner join v.hotelOrders vh join vh.hotelOrder as h with h.orderStatus=" + OrderStatus.FAXED.getCode());

/***

   上面深青色的代码如果采用下面蓝色的代码将发生上述异常,原因关联不到相关的对象。

     dquery.append(" inner join v.hotelOrders .hotelOrder as h with h.orderStatus=" + OrderStatus.FAXED.getCode());

***/
     // 可选项的订单列表
    } else if (VacationOrderQueryType.Option_unconfirm_order_list == vacationorderCondition.getQueryType()) {
     dquery.append(" inner join v.multipleOrders vm with vm.status !=" + VacationOrderConfirmStatus.NEW);
    }
    dquery.append("  where (1 = 1)  ");
    dquery.appendIfNotNull(" and  v.id=:orderNo ", "orderNo", vacationorderCondition.getOrderNo());
    dquery.appendIfNotEmpty(" and v.cityCode=:cityCode ", "cityCode", vacationorderCondition.getCityCode());
    dquery.appendIfNotEmpty("and v.subscriber.name=:operatorName", "operatorName", vacationorderCondition.getOperatorName());
    dquery.appendIfNotNull(" and v.orderPaymentType=:orderPaymentType", "orderPaymentType", vacationorderCondition.getOrderPaymentType());
    dquery.appendIfNotNull(" and v.vacationType in (:vacationType)", "vacationType", vacationorderCondition.getVacationTypes());
    dquery.appendIfNotNull(" and v.vacationcategory in (:vacationcategory)", "vacationcategory", vacationorderCondition
      .getVacationCategorys());
    dquery.appendIfNotNull(" and v.subscriberId=:subscriberId", "subscriberId", vacationorderCondition.getSubscriberId());
    dquery.appendIfNotEmpty(" and v.productMgr=:productMgr", "productMgr", vacationorderCondition.getProductMgr());
    // 构建其他的查询条件的信息
    if (vacationorderCondition.getQueryType() != null) {
     createDynamicQuery(vacationorderCondition.getQueryType(), dquery);
    }
    return dquery.build(session);
   }
  }, paginater.getLimit(), sorter);
  return paginater.fromLimitedList(limitedList);
 }

 

 

特别关注:

在HQL中使用With用于设置查询的限制条件,减少关联的信息。

 

 

 

 

分享到:
评论

相关推荐

    很不错的Hibernate解决方案.pdf

    在此背景下,《很不错的Hibernate解决方案》一文介绍了一种基于Hibernate框架的物流系统持久层解决方案,旨在解决当前物流系统中存在的问题,并提升整体性能。 #### Hibernate框架简介 Hibernate是一种开放源代码的...

    Hibernate 多数据库支持解决方案

    Hibernate是一个强大的Java持久化框架,它允许开发者将对象模型与关系数据库进行映射,从而简化了数据库操作。在处理多数据库支持时,Hibernate提供了一些策略和技巧来确保应用程序能够在不同类型的数据库之间灵活...

    hibernate常见错误解决方案

    ### Hibernate常见错误解决方案 在开发基于Hibernate框架的应用程序时,我们经常会遇到各种各样...通过以上分析与解决方案,我们可以有效地识别和解决Hibernate中常见的异常问题,从而提高开发效率和应用程序的质量。

    Hibernate 删除出现异常的解决方案.doc

    在使用Hibernate进行数据库操作时,有时会遇到一种异常情况,即在尝试删除一个对象时,系统抛出"deleted object would be re-saved by cascade (remove deleted object from associations)"的异常。这个异常通常发生...

    Hibernate查询解决方案

    ### Hibernate查询解决方案详解 #### 一、概述 Hibernate 是一个开放源代码的 ORM(对象关系映射)框架,它提供了从 Java 类到数据库表的映射机制,以及数据的查询和获取方式。Hibernate 的核心功能之一是提供了...

    hibernate错误解决方案

    ### Hibernate 错误解决方案 #### 一、概述 在使用Hibernate框架进行开发的过程中,经常会遇到各种各样的异常问题。这些问题可能会导致程序无法正常运行,甚至影响到系统的稳定性。本文将针对几个常见的Hibernate...

    hibernate常见异常

    Hibernate 是一个流行的 Java 持久层框架,但是在实际开发中,我们经常会遇到各种异常。了解这些异常的原因和解决方案是非常重要的。本文将介绍 Hibernate 中的一些常见异常,包括 ...

    Hibernate下数据批量处理解决方案

    `scroll()`方法返回一个`ScrollableResults`对象,允许我们以游标方式处理结果集,这在处理大量数据时非常有效。同样,我们需要定期调用`flush()`和`clear()`以控制内存使用。例如: ```java Session session = ...

    hibernate的中文问题的解决方案

    ### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...

    解决在同一项目中Hibernate与Mybatis共存的问题的解决方案.docx

    任何框架都有自身的能力范围,就拿Hibernate和Mybatis这两个ORM框架来说。 Hibernate封装了很多有用的API给开发者,降低了操作数据库的难度和复杂度,同时也减少了模板代码的数量,但Hibernate留给开发者可操作的...

    HibernateSpring多数据库解决方案.doc

    总结起来,这个多数据库解决方案利用Spring的IoC容器管理和配置了多个数据源,同时结合Hibernate提供了ORM功能。通过`OpenSessionInView`模式,确保了Web请求中的持久化操作能在合适的Session上下文中进行。这样的...

    java异常解决方案.docx

    一、Hibernate 异常解决方案 * org.hibernate.TransientObjectException: 对象引用了未保存的瞬态实例 + 解决方案:检查对象是否已经被保存,如果没有,则需要调用 save() 或 update() 方法来保存对象。 * org....

    Struts+Spring+Hibernate通用分页解决方案

    综上所述,"Struts+Spring+Hibernate通用分页解决方案"是一个高效的Java Web开发策略,它充分利用了三大框架的优势,实现了数据的灵活分页,提高了应用的性能和用户体验。通过深入理解并实践这些技术,开发者可以更...

    weblogic10 与hibernate冲突解决方案 linux windows环境全解

    weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    #### 解决方案一:调整Hibernate的映射方式 在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = ...

    Hibernate延迟加载以及利用Spring

    - `lazy="proxy"`:表示Hibernate将为`Dept`实体创建一个代理对象,只有当真正访问到`Dept`对象的相关属性时,Hibernate才会发起数据库查询,加载实际的`Dept`对象。 - `fetch="select"`:默认值,表示在查询`Emp`时...

    Hibernate映射导致的几个异常

    当Hibernate尝试保存一个实体时,如果该实体中的某个被标记为`@NotNull`或在映射文件中定义为`not-null="true"`的属性值为null或者指向一个尚未持久化的瞬态(transient)对象,就会抛出此异常。解决方法是确保在...

    hibernate实现动态表查询的多种解决方案

    ### Hibernate 实现动态表查询的多种解决方案 #### 一、前言 在使用Hibernate进行数据库操作时,我们经常需要根据不同的需求对不同的表进行查询。特别是在处理多表、多库等复杂场景时,如何实现动态表查询就显得尤...

Global site tag (gtag.js) - Google Analytics