Hibernate@Formula在运行时设置值

Hibernate@Formula在运行时设置值,hibernate,Hibernate,我有一个Java实体,其字段带有注释@Formula,其中执行一个SQL查询,其中包含Firebird数据库的某些特定函数。 现在我必须迁移到Oracle数据库,我需要替换@Formula中的SQL代码。 有没有办法做到这一点?我是否可以通过某种方式扩展Hibernate@公式,以便在运行时更改注释的值? 谢谢您可以通过稍微不同的方式实现这一点 您可以在@Formula中放置一个占位符“{TO_BE__替换}”,并添加一个Hibernate拦截器进行更改。 在那里,您可以更改由hibernate

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

您可以通过稍微不同的方式实现这一点

您可以在
@Formula
中放置一个占位符
“{TO_BE__替换}”
,并添加一个Hibernate拦截器进行更改。 在那里,您可以更改由hibernate生成的SQL。只需检查SQL字符串并用实际值替换
{TO\u BE\u replacement}


看看如何添加拦截器

这正是我想要的。非常感谢。其思想是用适当的值(例如模式名)替换占位符。不太确定对性能的影响,因为所有查询都会被截取,比如截取器中的字符串包含check。如果这就是问题所在,那么请确保在拦截器中有一个轻量级的检查,以避免对所有查询运行它。完整的解决方案在topSites.net/article/51562859.shtml中描述