今天在用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的源代码 来实现这个功能。
最近项目太忙了,有空一定搞定这个问题!
分享到:
相关推荐
hibernate自动生成数据库文件.rar hibernate自动生成数据库文件.rar hibernate自动生成数据库文件.rar 不建议下载 某同学自己录的视屏
hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...
使用Hibernate编写通用数据库操作代码
根据hibernate反向生成数据库的java代码!
hibernate反向生成数据库程序一段简单的程序代码
hibernate连接金仓数据库所需jar包集合。
Hibernate不同数据库的连接及SQL方言
Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,Hibernate 不同数据库的连接及SQL方言,
hibernate3.0 和数据库生成pojo类的工程方法
Hibernate配置文件中配置各种数据库的driver、URL
利用hibernate的逆向工程生成数据库表
Eclipse使用hibernate插件反向生成数据库实体类,亲身操作,绝对真实有效
基于hibernate映射文件生成数据库的案例
Hibernate连接MySql数据库生成表结构,本例演示了一种比较少见的方式
根据hibernate配置文件生成数据库.zip
hibernate支持的所有数据库方言。用起来很方便。
eclipse从数据库逆向生成Hibernate实体类
hibernate可以实现简单的数据库操作,可以实现简单的数据增加,数据查询,数据修改,数据删除。
hibernate反向生成数据库表
Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源