【问题标题】:Hibernate @Formula set value at runtimeHibernate @Formula 在运行时设置值
【发布时间】:2017-09-23 22:45:07
【问题描述】:

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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

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

    您可以在@Formula 中放置一个占位符"{TO_BE_REPLACED}" 并添加一个Hibernate 拦截器来更改onPrepareStatement。 在那里你可以改变hibernate生成的SQL。只需检查 SQL 字符串并将{TO_BE_REPLACED} 替换为您的实际值。

    查看如何添加拦截器here

    【讨论】:

    • 这正是我想要的。谢谢!
    • 这个想法是用适当的值(例如模式名称)替换占位符。不太确定对性能的影响,因为所有查询都会被拦截器中包含检查的字符串拦截。如果这是问题所在,请确保在拦截器中进行轻量级检查,以避免为所有查询运行它。完整的解决方案在topsites.net/article/51562859.shtml
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多