Разрешить диалект SQL с помощью гибернации - PullRequest
5 голосов
/ 05 января 2012

Я отвечаю за перенос существующего проекта с Oracle на MSSQL, но поддерживаю оба этих режима.Устаревший проект использует Hibernate 3.x, но содержит некоторое количество сложных нативных запросов.Поэтому я хотел бы знать, какой диалект используется.

Ответы [ 3 ]

6 голосов
/ 13 января 2012

Наконец-то я нашел способ - но он специфичен для Hibernate.

//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().contains("Oracle")){
   ....
3 голосов
/ 26 августа 2016

Еще немного короче:

private @Autowired SessionFactory sessionFactory;

public Dialect getDialecT(){
    SessionFactoryImplementor sessionFactoryImpl = (SessionFactoryImplementor) sessionFactory;      
    return sessionFactoryImpl.getDialect();     
}
0 голосов
/ 30 мая 2016

Вот еще одно решение, специфичное для Hibernate.Это все еще уродливо, потому что включает в себя броски вниз, но не использует отражения:

Session session = (Session) entityManager.getDelegate();
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) session.getSessionFactory();
Dialect dialect = sessionFactory.getDialect();
if (dialect.toString().contains("Oracle")) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...