How to get Hibernate dialect during runtime

danisupr4 picture danisupr4 · Nov 28, 2014 · Viewed 12.3k times · Source


In my application, I use Hibernate with SQL Server database, so I set

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

in my persistence.xml.

In some case, I want to sort records with NULL include, I use keyword NULLS FIRST.
Because it is not supported by default by CriteriaQuery/CriteriaBuilder in Hibernate, then I use Interceptor to modify the native query.
The problem is, keyword NULLS FIRST is not supported in SQL Server, so I use keyword:

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

If I want to migrate database from SQL Server to Oracle (for example), then I need to put if-else in my Interceptor, choosing which dialect I am using, right?

This is how I illustrate them:

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"
}

How I can get the dialect configuration (in persistence.xml) during runtime?

Answer

CE ZHANG picture CE ZHANG · Nov 28, 2014

If you use Spring+hibernate, try this

@Autowired@Qualifier("sessionFactory") org.springframework.orm.hibernate3.LocalSessionFactoryBean sessionFactory; //Suppose using hibernate 3

and in your method:

sessionFactory.getHibernateProperties().get("hibernate.dialect")