`

Hibernate BUG:delete语句包含子查询后自动添加别名问题

    博客分类:
  • Java
阅读更多

Hibernate的HQL中delete语句中,表是没有别名的,即使你添加了,它也会帮你去掉的

但是这里遇到了一个bug,我的delete语句中包含了一个子查询后,就不对了

 

我的HQL如下:

delete from table1 where column1=:column1 and column2 not in (select column from table2) and column2 not in (:column2)

Hibernate生成的SQL如下:

delete from table1 where column1=? and (column2 not in  (select table2_.column from table2 table2_)) and (table1_.column2 not in  (? , ? , ?))

 

后面的table1_.column2自动添加了一个没有定义的表别名,执行的时候就报错了,最后发现就是因为前面的子查询问题

应该是Hibernate的一个bug,可能是因为检测到了前面的selete后,就自动给后面加上了一个别名,以为这是一个查询语句而不是delete语句了

 

解决方法把两个条件换个顺序就好了

修改后的HQL如下:

delete from table1 where column1=:column1 and column2 not in (:column2) and column2 not in (select column from table2)

这样问题就解决了

分享到:
评论
2 楼 欣水寓言 2010-01-17  
独立思考 写道
有没有考虑到hibernate jira去录一个缺陷呢,这样以后这个就会在后面的版本中被修复了


我不会也,没做过这个。。。
1 楼 独立思考 2010-01-15  
有没有考虑到hibernate jira去录一个缺陷呢,这样以后这个就会在后面的版本中被修复了

相关推荐

    hibernate执行原生sql语句

    然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的查询语言(HQL)。本文将介绍如何使用 Hibernate 执行原生 SQL 语句。 为什么需要执行原生 SQL 语句 在实际开发中,我们可能需要执行...

    Hibernate案例:办公自动系统

    【Hibernate 框架详解与办公自动化系统应用】 Hibernate 是一款强大的开源对象关系映射(ORM)框架,它为Java开发者提供了数据持久化的解决方案,极大地简化了数据库操作。在这个名为“办公自动系统”的案例中,...

    hibernate子查询

    这意味着你需要为这个临时的子查询结果创建一个新的Java类,然后在Hibernate映射文件中定义这个类,使用`subselect`属性指定子查询的SQL语句。这样,Hibernate就会根据这个子查询来获取和管理数据,而不是直接操作...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    7. **避免N+1查询问题**:当使用懒加载时,如果不恰当可能会导致N+1查询,应尽量通过子查询或JOIN操作解决。 通过学习和掌握Hibernate的检索方式以及查询优化技巧,开发者能够更高效地与数据库交互,提高应用的性能...

    Hibernate HQL查询语句总结.docx

    Hibernate HQL 查询语句总结 Hibernate HQL 查询语句是 Hibernate 框架中的一种查询语言,它提供了更加丰富的和灵活的查询特性,具有类似标准 SQL 语句的查询方式,同时也提供了更加面向对象的封装。以下是 ...

    Hibernate中查询语句

    Hibernate中的查询方法若HQL,详细讲解HQL与使用的具体例子

    Hibernate语句

    **Hibernate语句详解** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在Java开发中,它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句。...

    Hibernate中Sql语句

    - **复杂查询**:当需要执行复杂的数据库操作时,如分组、聚合、子查询等,原生SQL能更好地表达这些需求。 - **性能优化**:有时候为了优化查询性能,需要对底层的SQL语句进行精确控制。 - **特定功能支持**:某些...

    精通Hibernate:Java对象持久化详解.zip

    《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...

    hibernate-HQL语句大全

    hibernate-HQL语句大全

    Hibernate调用配置文件中的sql语句

    4. **结果映射**:默认情况下,Hibernate会将查询结果自动映射到对应的实体类。如果SQL查询返回的结果不匹配任何实体类,我们需要显式指定结果集的映射,使用`<return-scalar>`标签。 5. **事务处理**:执行SQL查询...

    hibernate通用查询语句生成类

    这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...

    Hibernate生产SQL语句

    总结来说,模仿Hibernate生成SQL语句需要对Hibernate的ORM机制有深入理解,包括实体类的定义、属性映射、查询API的使用,以及Java反射的应用。通过这种方式,开发者可以自定义查询逻辑,同时利用Hibernate的强大功能...

    hibernate性能:性能、规模、风险 初评

    4. **查询优化**:Hibernate提供多种查询方式,如HQL(Hibernate Query Language)、Criteria API等,这些查询方式能够根据实际情况进行优化,提高查询速度。 #### 三、适用范围与性能评估 1. **项目规模**:对于...

    hibernate01:概念、正向工程、反向工程

    - **持久化(Persistence)**:Hibernate通过Session接口实现对象的持久化,包括保存、更新、删除和查询操作。 - **HQL(Hibernate Query Language)**:是Hibernate提供的面向对象的查询语言,类似于SQL,但更适应...

    hibernate查询语句--HQL

    ### Hibernate 查询语句 -- HQL #### 概述 Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而简化了数据访问逻辑。在 Hibernate 中,执行查询操作的主要...

    Hibernate查询语句大全PPT精选

    学习Hibernate 的HQL语句的不错选择,

    操作Hibernate类:增加,删除,修改及查询.pdf

    在Java的持久化框架Hibernate中,操作数据库主要通过Session接口来实现,包括增删改查(CRUD)等基本操作。下面将详细讲解如何使用Hibernate进行这些操作。 1. **增加(Insert)** - Hibernate提供了`save()`方法...

Global site tag (gtag.js) - Google Analytics