Hibernate @Formula 在运行时设置值

4
我有一个带有注释@Formula的Java实体,其中执行了一个包含Firebird数据库特定函数的SQL查询字段。现在我必须迁移到Oracle数据库,并且需要替换@Formula中的SQL代码。是否有一种方法可以实现这一点?我是否可以以某种方式扩展Hibernate @Formula以便在运行时更改注释的值?谢谢
1个回答

9
您可以采用稍微不同的方式来实现。在@Formula中,您可以放置一个占位符"{TO_BE_REPLACED}",并添加一个Hibernate拦截器来更改onPrepareStatement。在那里,您可以更改由Hibernate生成的SQL。只需检查SQL字符串,并使用实际值替换{TO_BE_REPLACED}即可。
请参见如何添加拦截器这里

这正是我正在寻找的。谢谢! - Andrea Caloni
这个想法是用正确的值(例如模式名称)替换占位符。不太确定对性能的影响,因为所有查询都将被拦截器拦截,并进行类似于字符串包含检查的操作。如果这是问题所在,请确保在拦截器中进行轻量级检查,以避免对所有查询运行它。完整的解决方案在thetopsites.net/article/51562859.shtml中有描述。 - Youness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接