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?
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")