Rin*_*eri 9 java database-connection jpa datasource jasper-reports
我正在使用Jasper Reports来生成报告.
我正在使用临时表生成报告,我需要JPA使用相同的连接,同时创建临时表我如何实现相同.
Kow*_*ser 15
可能你只有三步之遥.
您可以使用以下方式执行此操作
使用JTA数据源作为persistance.xml,如下所示
<persistence-unit name="sample">
<jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source>
....
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)对于报告生成,请检索connectionfrom数据源,如下所示
InitialContext initialContext = new InitialContext();
DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS");
Connection connection = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)使用连接生成如下所示的报告:
JasperPrint print = JasperFillManager.fillReport(report, parameters, connection);
Run Code Online (Sandbox Code Playgroud)这应该是我所相信的全部.我们的想法是,使用JPA和JasperReport的通用JNDI连接,然后在适用的地方使用它们.
我没有使用JasperReports,但是使用BIRT报告并且没有任何问题地解决了这个问题.
Mar*_*uri 10
在JasperReports中,您可以使用本机JDBC查询或EJBQL查询.
使用后者时,您的代码应如下所示(来自JRJpaQueryExecuter api):
Map parameters = new HashMap();
EntityManager em = emf.createEntityManager();
parameters.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
JasperRunManager.runReportToPdfFile(fileName, parameters);
Run Code Online (Sandbox Code Playgroud)
如果您确实需要底层jdbc连接,那么实现它的方式会因您使用的JPA实现而异.
EclipseLink(JPA 2.0):
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
(您不需要为报告开始和提交事务)
| 归档时间: |
|
| 查看次数: |
10909 次 |
| 最近记录: |