gpt4 book ai didi

java - 如何在运行时获取 Hibernate 方言

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


在我的应用程序中,我将 Hibernate 与 SQL Server 数据库一起使用,所以我设置了

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect">

在我的 persistence.xml 中。

在某些情况下,我想对包含 NULL 的记录进行排序,我使用关键字 NULLS FIRST。
因为Hibernate中的CriteriaQuery/CriteriaBuilder默认是不支持的,所以我使用Interceptor来修改native query。
问题是,SQL Server 不支持关键字 NULLS FIRST,所以我使用关键字:

case when column_name is null then 0 else 1 end, column_name

如果我想将数据库从 SQL Server 迁移到 Oracle(例如),那么我需要将 if-else 放入我的拦截器中,选择我使用的方言,对吗?

这就是我说明它们的方式:

String dialect = ..............
if (dialect.equals("org.hibernate.dialect.SQLServerDialect")) { // get SQL Server dialect
// put keyword "case when column_name is null then 0 else 1 end, column_name"
} else {
// put keyword "NULLS FIRST/LAST"
}

如何在运行时获取方言配置(在 persistence.xml 中)?

最佳答案

下面的方法很适合我访问在 WildFly 14 中运行的 Java EE 应用程序中的方言:

import org.hibernate.Session;
import org.hibernate.dialect.Dialect;
import org.hibernate.internal.SessionFactoryImpl;

...

@PersistenceContext
private EntityManager entityManager;

...

final Session session = (Session) entityManager.getDelegate();
final SessionFactoryImpl sessionFactory = (SessionFactoryImpl) session.getSessionFactory();
final Dialect dialect = sessionFactory.getJdbcServices().getDialect();
logger.info("Dialect: {}", dialect);

您需要将 hibernate-core 依赖项添加到 pom.xmlprovided 范围内。

关于java - 如何在运行时获取 Hibernate 方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181397/

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