Hibernate получить объект подключения для JasperRunManager

Я использую Hibernate 3.2.5 в проекте и Jasper 3.7.2 для создания некоторых отчетов для приложения.

Есть ли способ получить объект подключения из объекта HibernateSessionFactory? Я хочу обработать только одно соединение, потому что в настоящее время у меня должен быть файл свойств для соединения ODBC, который будет обрабатывать Jasper через статические методы JasperRunManager, а также Hibernate для другой стороны.

Это метод мне нужно передать соединение:

byte[] net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(InputStream inputStream, Map parameters, Connection conn) throws JRException

Заранее спасибо.:)

2 ответа

Решение

У меня была такая же проблема с Hibernate 4 и вот решение

Session ses = ...
final InputStream finalCompiledReportStream = compiledReportStream;
final OutputStream finalByteArrayOutputStream = byteArrayOutputStream;
ses.doWork(new Work() {
    public void execute(Connection connection) throws SQLException {
       try {
           JasperFillManager.fillReportToStream(finalCompiledReportStream, finalByteArrayOutputStream, parameters, connection);
       } catch (JRException e) {
           ReportAction.this.logger.error(e);
       }
    }
});

Это работает потрясающе, и вы можете использовать объект подключения в другом месте, где он может понадобиться в коде. DoWork может потребоваться, чтобы вы продолжали делать это много раз, но создание хорошего объекта соединения - более чистое решение.

SessionImpl sessionImpl = (SessionImpl) session;
Connection conn = sessionImpl.connection();

куда session это имя объекта Hibernate Session

Другие вопросы по тегам