如何在playframework 2.4+中正确使用JPA EntityManager

时间:2015-12-18 12:36:21

标签: java scala jpa web playframework

在playframework中使用JPA的文档相当稀疏。 所有这些,从下一页开始, https://www.playframework.com/documentation/2.4.x/JavaJPA webix.toExcel($$("chart"), { columns:{ "dept1":true, "dept2":true, "m":true } }); 和其他基本配置的简单示例,必须先完成才能使用它们。 但是,如何使用persistence.xml,不是很详细。

在网络上的各种示例中,我遇到了三种方法来EntityManager

  1. EntityManager

  2. JPA.em()

  3.     EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("defaultPersistenceUnit");
        EntityManager em = entityManagerFactory.createEntityManager();
        // where the string 'defaultPersistenceUnit' corresponds to the persistence-unit name in my persistence.xml file. 
    

    如果我使用JPA似乎打算玩,我

    1. 在控制器中有JPA.em(String key)带注释的方法//必须在控制器中
    2. @Transactional获取EntityManager实例//而不是采用String键的其他方法。那是错的!
    3. 执行我的操作。结束。
    4. 行。这很好。

      JPA.em()

      但是,我想了解;

      1. @Transactional public Result addPerson() { Person person = Form.form(Person.class).bindFromRequest().get(); EntityManager em = JPA.em(); persist(em, person); // 'persist' is my static helper method return redirect(routes.Application.index()); }
      2. 的生命
      3. EntityManager
      4. 时使用了EntityManager
      5. JPA.em()时使用了EntityManager的内容 //"默认"似乎是迄今为止唯一适用于此的关键......
      6. 当我
      7. 时使用了JPA.em("default")
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("defaultPersistenceUnit");
            EntityManager em = entityManagerFactory.createEntityManager();
        
        1. 为什么3和4两种方法中使用的密钥都不对应?
        2. JPA类的文档指定 EntityManager 获取此线程的指定持久性单元的EntityManager。 https://www.playframework.com/documentation/2.4.x/api/java/index.html

          所以我假设密钥将/可能/应该对应于persistence-unit元素的name属性的值(在persistence.xml中)。 即,

          public static javax.persistence.EntityManager em(java.lang.String key)

          所以,虽然我有这个工作,它仍然感觉有点像魔术。我想我必须调试Play代码本身?只要我坚持从控制器启动事务(显然是预期的)我想我应该没有问题....与<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <non-jta-data-source>DefaultDS</non-jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- can be create/validate/update/create-drop --> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence> 的生命周期...清理数据库资源等。

          但我想可能会出现需要EntityManager在其他情境中的情况?

          那我该用什么? 在Playframework(或其他)Web应用程序的上下文中EntityManager的最佳实践生活是什么? 请求的生命?申请的生命?或者介于两者之间的动态?什么是playframework使用自己的托管EntityManager

0 个答案:

没有答案