我经常在命令行java应用程序中使用JPA。使用应用程序服务器,我可以通过<jta-data-source>jdbc/myDatabase</jta-data-source>
中的persistence.xml
轻松链接到外部配置。如果没有应用服务器,怎么可能?我可以找到有关属性<non-jta-data-source/>
的一些信息。但是如何以优雅的方式引用外部文件(可能是属性格式)中的值?尽可能少的样板代码会很好。
我已经在这里找到了解决方法,但我认为有一种更优雅的方式: JPA Desktop application
答案 0 :(得分:1)
我需要一个如下所示的属性文件:
javax.persistence.jdbc.url = jdbc:mysql://localhost:3306/database
javax.persistence.jdbc.user = root
javax.persistence.jdbc.password = root
javax.persistence.jdbc.driver = com.mysql.jdbc.Driver
尊重此方案允许我以后使用这些值而不进行任何映射。然后,我可以轻松地传递值,以便像这样创建EntityManagerFactory:
try (final InputStream jpaFileInput = Files.newInputStream(propFile)) {
final Properties properties = new Properties();
properties.load(jpaFileInput);
emf = Persistence.createEntityManagerFactory(PU_NAME, properties);
}
答案 1 :(得分:0)
将JPA与桌面应用程序一起使用很容易。这几乎是一回事,但你需要管理交易。由于您没有应用程序服务器,因此必须由您完成每项事务的管理。可以通过EntityManagerFactory实现对JPA单元的访问。
示例:
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("jpa-example");
EntityManager em = emFactory.getEntityManager();
em.getTransaction().begin();
em.persist(address);
em.getTransaction().commit();
您需要将 persistence.xml文件放在META-INF 文件夹下。您需要在持久性配置文件中指出事务类型为 RESOURCE_LOCAL 。这是在没有Application Server的情况下独立运行所必需的:
<persistence-unit name="jpa-example" transaction-type="RESOURCE_LOCAL">
但是,您需要下载并链接项目类路径中的库。您将需要JTA jar和您的持久性提供程序JAR,它们可能是Hibernate或您选择的任何其他供应商。这可以通过Maven干净利落地实现。
您可能需要查看本教程: http://java.dzone.com/articles/jpa-tutorial-setting-jpa-java