在我的应用程序中,我使用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,选择我正在使用哪种方言,对吧?
这就是我说明它们的方式:
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中)?
解决方法
如果你使用Spring hibernate,试试这个
@Autowired@Qualifier("sessionFactory") org.springframework.orm.hibernate3.LocalSessionfactorybean sessionFactory; //Suppose using hibernate 3
在你的方法中:
sessionFactory.getHibernateProperties().get("hibernate.dialect")