一次性为所有MySQL Select查询添加一列

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

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

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并在/*Comment*/中添加CustomMySQLDialect

对于为实现此目的而修改的方法有些困惑。希望任何朝着正确方向的指针。

可以重写transformSelectString(java.lang.String)in方法org.hibernate.dialect.Dialect来做到这一点吗?

编辑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文件中,为会话工厂配置拦截器:

<bean id="customDBInterceptor" class="com.felix.dao.interceptor.CustomDBInterceptor"/>

<bean id="sessionFactory"

class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="datasource" />

<property name="entityInterceptor">

<ref bean="customDBInterceptor"/>

</property>

...

</bean>

确保自定义数据库拦截器对sessionFactory没有周期性的依赖关系。通过以上操作,将拦截通过会话工厂触发的所有查询,进行修改,然后将其传递给该onPrepareStatement方法。

以上是 一次性为所有MySQL Select查询添加一列 的全部内容, 来源链接: utcz.com/qa/422556.html

回到顶部