在我的应用程序中,我将Hibernate与SQL Server数据库结合使用,因此我设置了
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect">
保存在我的persistence.xml文件中。
在某些情况下,我想排序记录与NULL包括,我使用关键字NULLS第一。
因为Hibernate中的CriteriaQuery/CriteriaBuilder默认不支持它,所以我使用Interceptor来修改原生查询。
问题是,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中)?
4条答案
按热度按时间kulphzqa1#
对于在WildFly 14中运行的Java EE应用程序中访问方言,下面的代码非常有效:
您需要将具有 provided 作用域的
hibernate-core
依赖项添加到pom.xml
。2nbm6dog2#
如果您使用Spring+ hib,请尝试以下操作
在你的方法中
bzzcjhmw3#
我已经从这个帖子中找到了答案:Resolve SQL dialect using hibernate
谢谢你的@Dewfy,
解决办法是这样的:
66bbxpm54#
其他的答案对我来说都不管用。这个管用: