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