Как заставить удивительный фреймворк Hibernate предоставлять объект подключения из своего сеанса?

Hibernate устарел от connection(), потому что они думают, что фреймворк настолько классный, что никому никогда не понадобится это соединение. И нет, это НЕ то же самое, что предоставление соединения, если только вы не исходите из Haskell. В любом случае, у меня есть лучшая идея избавиться от гибернации: обертка Connection окружает сеанс гибернации, поэтому я могу передавать сеанс как соединение. Я слышал, что есть способ установить связь с отражением. Кто-нибудь знает, где взять такую ​​пленку?

public class SessionConnection implements Connection {

   private final Session session;
   private final Connection conn;

   public SessionConnection(Session session) {
       this.session = session;
       this.conn = getConnectionFromStupidHibernate(session);
   }

   // delegate methods go here
}

person chrisapotek    schedule 01.05.2012    source источник
comment
Я не знаю, но, пожалуйста, скажи мне, если узнаешь, потому что я всегда хотел это сделать.   -  person JohnPristine    schedule 02.05.2012
comment
Хм... Я согласен, что это немного больно, но почему решение doWork() не работает для вас (без каламбура)?   -  person GreyBeardedGeek    schedule 02.05.2012
comment
Java не является функциональным языком. Я хочу передать объект, чтобы клиенты могли делать с ним все, что захотят. Передача функции или замыкания — это совсем другое дело.   -  person chrisapotek    schedule 02.05.2012
comment
Команде Hibernate не нужно было думать, что их фреймворк настолько хорош, чтобы внести это изменение. Они также могут думать, что есть конечная область, которую они хотят охватить. Разоблачение необработанного соединения означает, что они имеют дело с бесчисленными гневными сообщениями, жалующимися на еще одну ошибку в Hibernate.   -  person Marko Topolnik    schedule 02.05.2012
comment
Спящий режим похож на изучение испанского языка в дополнение к английскому, чтобы вы могли лучше говорить по-английски. Это решение проблемы, которая создает большую проблему, чем первоначальная. В остальном это здорово!   -  person chrisapotek    schedule 02.05.2012


Ответы (2)


Если вы используете Spring, просто используйте тот же DataSource, который вы используете для своей SessionFactory - не проектируйте свое приложение вокруг спящего режима, вставьте спящий режим в свой дизайн.

person ianpojman    schedule 02.05.2012
comment
конечно, это не имеет никакого отношения к Spring, но обычно Spring побуждает вас собирать систему из независимых объектов, а не просто соединять вместе все в коде первым пришедшим на ум способом. в любом случае при настройке hib/spring уже где-то определен bean-компонент типа DataSource. Так что все, что вам нужно сделать, это подключить его туда, где вам это нужно. - person ianpojman; 03.05.2012

Вам потребуется SessionFactory и ConnectionProvider — см. Hibernate: предоставление подключений.

person ZeroOne    schedule 01.05.2012