`
xbwolf
  • 浏览: 12712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 在DB2数据库下生成SQL注释的问题

阅读更多

今天在用hibernate连接DB2数据库时发现一个问题:增加、修改数据都没事,但是执行查询操作就报错了,而且错误居然是:executeQuery method cannot be used for update. 而且切换到mysql上执行就没有问题,晕了。。。

 

后来发现,每句生成的SQL前门都会带一句类似 /*  xxxxx  */的注释,这就找到了问题的关键所在。这样的注释在mysql里执行是没有问题的,可是DB2只认‘--’这样的注释,所以肯定会报错! 找到原因,我把hibernate的源码导入工程里,用断点调试,发现下列两个地方:

 

if ( getFactory().getSettings().isCommentsEnabled() ) {
	select.setComment( getComment() );
}

 这个是根据hibernate.cfg.xml配置文件里的一个配置来决定是否要在生成的SQL中加入注释!!哎,看来还是不熟悉啊。。搞了半天原来加个配置就OK 了! GOOGLE的结果是,在配置文件中加入 :

 

<property name="hibernate.use_sql_comments">false</property>

 就不会生成SQL注释。我一看配置文件,是有这个配置,不过是打开的!所以就困扰了我一上午。。。

 

不过我已经对这个问题产生了兴趣,继续研究源码,发现一下一段代码:

 

	public String toStatementString() {
		StringBuffer buf = new StringBuffer(guesstimatedBufferSize);
		
		if ( StringHelper.isNotEmpty(comment) ) {
			buf.append("/* ").append(comment).append(" */ ");
		}
		
                。。。。。。。省略。。。。。

    }

 

呵呵,这段代码是很明确的告诉你:如果你把上面的那个配置项打开,在所有数据库下生成的SELECT语句前都会加上 /* xxx */的注释!  后来我就琢磨,这个算不算hibernate的一个BUG那?  是不是应该根据不同的配置方言 加入不同的注释? 呵呵 ,所以决定修改一下hibernate的源代码 来实现这个功能。

 

最近项目太忙了,有空一定搞定这个问题!

分享到:
评论
1 楼 sunjilu05 2009-06-01  
太正了,我就是遇到这个问题,为何到现在HIBERNAT都没有修正这个BUG呢?

相关推荐

    hibernate自动生成数据库文件

    开发者只需定义好实体类,并使用注解如`@Entity`、`@Table`等来标识表和字段,然后使用Hibernate Tools即可生成对应的DDL(Data Definition Language)脚本,执行这个脚本就能在数据库中创建相应的表结构。...

    根据hibernate反向生成数据库的java代码

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。"根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括...

    hibernate@注解方式配置实体类,调用javadoc接口生成数据库表及字段的注释说明

    hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...

    Hibernate不同数据库的连接及SQL方言

    在上面的配置中,我们使用了org.hibernate.dialect.SQLServerDialect SQL方言来生成适合SQL Server数据库的SQL语句。 下面是Hibernate支持的不同数据库的SQL方言: * DB2:org.hibernate.dialect.DB2Dialect * DB2...

    hibernate反向生成数据库程序

    在实际项目中,开发者可能会进一步利用Hibernate的逆向工程功能,自动生成实体类和映射文件,以便更方便地进行数据库操作。这些实体类可以直接映射到数据库表,使得开发者可以专注于业务逻辑,而不用过多关注底层SQL...

    hibernate数据库通用SQL代码

    在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者可以更专注于业务逻辑而不是底层的SQL操作。本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入...

    hibernate根据字段生成数据库表

    ### Hibernate根据字段生成数据库表 #### 一、概述 在软件开发过程中,特别是在进行多数据库支持的应用程序开发时,我们经常需要将同一套代码部署到不同的数据库系统上。这种情况下,手动为每个数据库创建相同的表...

    hibernate连接金仓数据库所需jar包集合lib.7z

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,极大地简化了数据库操作。金仓数据库,又称为Kingbase,是一款国产的高性能、高可靠性的关系型数据库管理...

    hibernate中所有数据库方言

    在探讨Hibernate中所有数据库方言之前,我们先简要回顾一下Hibernate框架本身。Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用与各种关系型数据库进行交互。它提供了强大的功能,如对象持久化、查询...

    Eclipse数据库hibernate反向生成数据库类

    在本篇文章中,我们将详细介绍如何使用Eclipse中的Hibernate插件反向生成数据库实体类。首先,我们需要安装Hibernate Tools,下载地址为http://www.jboss.org/tools/download/archive/3_1_GA.html,我们只需要下载...

    hibernate与各种数据库的连接配置

    下面将介绍 Hibernate 与各种数据库的连接配置,包括 MySql、Sql Server、Oracle 和 DB2 等。 MySql 连接配置 MySql 是一个开源的关系数据库管理系统,广泛应用于 web 应用程序中。要使用 Hibernate 连接 MySql ...

    hibernate连接DB2驱动包

    标题中的“hibernate连接DB2驱动包”指的是在Java应用程序中使用Hibernate ORM框架与IBM的DB2数据库进行交互时所需的驱动程序包。这些驱动包是连接Java应用程序和DB2数据库之间的桥梁,允许数据的存取和操作。下面将...

    java连接DB2数据库编程简介

    Java连接DB2数据库编程是Java开发中的一项重要技能,尤其在企业级应用中,数据库的交互通常是必不可少的。本篇文章将深入探讨如何使用Java来连接并操作DB2数据库,包括基本的连接步骤、所需的库以及实用示例。 首先...

    hibernate映射文件生成数据库

    这将在数据库中创建对应的表结构。 三、FanxiangShengCheng案例分析 在提供的压缩包`FanxiangShengCheng`中,可能包含了具体的实体类、映射文件以及示例代码,用于演示如何通过Hibernate映射文件生成数据库。案例...

    Hibernate 不同数据库的连接及SQL方言.txt

    Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,

    Hibernate 多数据库支持解决方案

    未来 Hibernate是一个强大的Java持久化框架,它允许开发者将对象模型与关系数据库进行映射,从而简化了数据库操作。...通过良好的设计和测试,可以确保Hibernate应用程序在多种数据库环境下稳定运行。

    hibernate显示不带?的完整sql

    在开发过程中,为了调试和优化SQL查询,有时我们需要查看Hibernate生成的完整SQL语句,包括其参数值。通常,Hibernate默认输出的SQL语句会用问号(?)作为占位符,这在理解查询逻辑时可能会带来不便。本文将详细介绍...

    根据hibernate配置文件生成数据库.zip

    通过在Hibernate映射文件中定义外键,可以确保对象间的关联在数据库层面得以体现。外键约束在多表操作中尤其重要,它们帮助维护引用完整性,防止出现悬挂引用。 总结来说,这个压缩包提供了关于如何使用Hibernate和...

    hibernate3.0 和数据库生成pojo类的工程方法

    类中的属性通常使用`@Column`注解来指定其在数据库表中的映射,主键字段会使用`@Id`注解。 7. **映射文件的生成**: `.hbm.xml`文件是Hibernate的映射文件,它定义了类和表之间的关系,包括字段映射、关联规则等。...

    Hibernate连接MySql数据库生成表结构

    在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本教程将详细讲解如何使用Hibernate连接MySQL数据库并自动生成表结构,这是一...

Global site tag (gtag.js) - Google Analytics