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的源代码 来实现这个功能。

 

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

你可能感兴趣的:(sql,mysql,Hibernate,db2,Google)