一次性向所有MySQL Select Queries添加一列

尝试在运行时向我的Web应用程序中的所有MySQL Select Queries添加注释。

例如,代码中的原始查询如下所示:

select a,b,c from ...... select x,y from... 

所有这些都需要在运行时修改为:

 select a,b,c /*Comment*/ from ... select x,y /*Comment*/ from ... 

该应用程序在Hibernate 4.2.1上运行。 我能想到的唯一解决方案是扩展org.hibernate.dialect.MySQLDialect并在新的CustomMySQLDialect添加/*Comment*/

有点困惑,要修改哪种方法来实现这一目标。 会欣赏正确方向的任何指针。

可以重写org.hibernate.dialect.Dialect transformSelectString(java.lang.String)方法来完成这个吗?

编辑1:自定义MySQL方言中的transformSelectString不适用于运行时SQL修改

创建自定义数据库拦截器

 package com.felix.dao.interceptor; import org.hibernate.EmptyInterceptor; public class CustomDBInterceptor extends EmptyInterceptor { @Override public String onPrepareStatement(String sql) { String commentStr = "/*Comment*/" return super.onPrepareStatement(commentStr+sql); } } 

在Spring Context文件中,为会话工厂配置Interceptor:

       ...  

确保Custom DB Interceptor对sessionFactory没有循环依赖。 通过上述内容,拦截,修改了通过会话工厂触发的所有查询,然后将其传递给onPrepareStatement方法。

如果您的目标是添加一个具有常量值的额外列,请尝试为其添加别名:

 SELECT a, b, c, "TESTVALUE" AS `new_column` FROM ...