繁体   English   中英

如何获得与使用Java的JPA相同的数据库连接?

[英]How to get the same database connection as JPA used using Java?

我正在使用Jasper Reports来生成报告。

我正在使用临时表生成报告,我需要JPA使用相同的连接,同时创建临时表我如何实现相同。

可能你只有三步之遥。

您可以使用以下方式执行此操作

  1. 使用JTA数据源作为persistance.xml,如下所示

     <persistence-unit name="sample"> <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> .... </persistence-unit> 
  2. 要生成报告,请从数据源检索connection ,如下所示

     InitialContext initialContext = new InitialContext(); DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); Connection connection = dataSource.getConnection(); 
  3. 使用连接生成如下所示的报告:

     JasperPrint print = JasperFillManager.fillReport(report, parameters, connection); 

这应该是我所相信的全部。 我们的想法是,使用JPA和JasperReport的通用JNDI连接,然后在适用的地方使用它们。

我没有使用JasperReports,但是使用BIRT报告并且没有任何问题地解决了这个问题。

在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);

如果您确实需要底层jdbc连接,那么实现它的方式会因您使用的JPA实现而异。

EclipseLink (JPA 2.0):

entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();

(您不需要为报告开始和提交事务)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM