2014-11-28 17 views
5


w mojej aplikacji, używam hibernacji z bazy danych SQL Server, więc mogę ustawićJak zdobyć hibernacji dialekt podczas wykonywania

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

w moim persistence.xml.

W niektórych przypadkach chcę posortować rekordy z wartością NULL, używam słowa kluczowego NULLS FIRST.
Ponieważ nie jest obsługiwana domyślnie przez CriteriaQuery/CriteriaBuilder w Hibernate, używam Interceptora do modyfikowania zapytania natywnego.
Problem polega na tym, null słów kluczowych PIERWSZA nie jest obsługiwane w SQL Server, więc używam słowa kluczowego:

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

Jeśli chcę przenieść bazę danych z serwera SQL Oracle (na przykład), to muszę się położyć, jeśli -zespól w moim Interceptorze, wybierając który dialekt używam, prawda?

To jak ja zilustrować je:

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

Jak mogę uzyskać konfigurację dialekt (w persistence.xml) w czasie wykonywania?

+0

inny link o wartości null pierwszego słowa kluczowego: https://hibernate.atlassian.net/browse/HHH-465 – danisupr4

+0

używam Interceptor na podstawie tego artykułu: http://stackoverflow.com/questions/3683174/hibernate- order-by-with-nulls-last – danisupr4

+0

Te linki mogą pomóc ci uzyskać informacje dialektu od SessionFactory; [link1] (http://stackoverflow.com/questions/1571928/retrieve-auto-detected-hibernate-dialect) i [link2] (http://stackoverflow.com/questions/8742617/resolve-sql-dialect-using -hibernate) –

Odpowiedz

0

Jeśli używasz Wiosna + hibernacji, spróbuj tego

@[email protected]("sessionFactory") org.springframework.orm.hibernate3.LocalSessionFactoryBean sessionFactory; //Suppose using hibernate 3 

w swojej metodzie:

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

Znalazłem odpowiedź z tego postu: Resolve SQL dialect using hibernate

Dziękuję za @ Dewfy,

tutaj jest rozwiązanie:

//take from current EntityManager current DB Session 
Session session = (Session) em.getDelegate(); 
//Hibernate's SessionFactoryImpl has property 'getDialect', to 
//access this I'm using property accessor: 
Object dialect = 
     org.apache.commons.beanutils.PropertyUtils.getProperty(
      session.getSessionFactory(), "dialect"); 
//now this object can be casted to readable string: 
if (dialect.toString().equals("org.hibernate.dialect.SQLServerDialect")) { 

} else { 

} 
Powiązane problemy