gpt4 book ai didi

java - Hibernate 翻译功能

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:22 31 4
gpt4 key购买 nike

我们的项目必须能够在 Oracle 和 SQL Server 中运行。问题是我们有许多带有非标准运算符(即 bitand 和 || )和函数(即 SUBSTR )的 HQL + native 查询,这些查询在 Oracle 中运行良好,但在 SQL Server 中却不行。

我想知道 Hibernate 是否能够动态翻译它们。我想 HQL 可能会这样,因为它创建了一个 AST,但我怀疑这同样适用于 native 查询。

附加问题:处理这些棘手查询的最佳方法是什么?条件语句、子类化、其他……目标是不要大量修改代码。

提前致谢

最佳答案

为 HQL 使用自定义方言。不要使用 ||,而是创建你自己的名为 concat 的函数。然后,在 SQL Server 方言中将其添加到构造函数中:

registerFunction("concat", new VarArgsSQLFunction(Hibernate.STRING, "", "+", ""));

您不必更改 Oracle 方言,因为 Oracle 已经有一个 concat 函数,所以它只是通过,但对于其他函数,您可能需要在两者中注册新函数。

对于 SQL 查询,由于无论如何都是动态构建的,因此您可以使用基类方法,例如 super.addBitAndClause(leftSide, rightSide)。

您甚至可以动态获取方言,尽管 Hibernate 并没有通过在界面上放置它来简化它:

Dialect d = ((SessionFactoryImpl)sessionFactory).getDialect()

关于java - Hibernate 翻译功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1848127/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com