【发布时间】:2014-11-28 03:18:43
【问题描述】:
在我的应用程序中,我使用 Hibernate 和 SQL Server 数据库,所以我设置了
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect">
在我的 persistence.xml 中。
在某些情况下,我想对包含 NULL 的记录进行排序,我使用关键字 NULLS FIRST。
因为 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 放入我的 Interceptor 中,选择我使用的方言,对吗?
我是这样说明它们的:
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 中)?
【问题讨论】:
-
另一个关于 NULLS FIRST 关键字的链接:hibernate.atlassian.net/browse/HHH-465
-
我根据这篇文章使用Interceptor:stackoverflow.com/questions/3683174/…
-
感谢 Wundwin Born,我在第二个链接上找到了解决方案:stackoverflow.com/questions/8742617/…
标签: java hibernate persistence.xml dialect