一次性向所有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 ...
- HIbernate映射exception:PropertyNotFoundException:找不到setter
- 在hibernate中缺少@Temporal注释
- 如何将@UniqueConstraint与单表inheritance(JPA)一起使用?
- Hibernate返回BigIntegers而不是long
- 使用@PreUpdate的问题
- 无论如何,我都无法在Hibernate中批量处理MySQL INSERT语句
- 引起:org.hibernate.AnnotationException:mappedBy引用未知的目标实体属性
- Hibernate工具 – DAO生成
- 如何强制初始化Hibernate JPA代理以在JSON调用中使用它