在playframework中使用JPA的文档相当稀疏。
所有这些,从下一页开始,
https://www.playframework.com/documentation/2.4.x/JavaJPA
是 webix.toExcel($$("chart"), {
columns:{
"dept1":true,
"dept2":true,
"m":true
}
});
和其他基本配置的简单示例,必须先完成才能使用它们。
但是,如何使用persistence.xml
,不是很详细。
在网络上的各种示例中,我遇到了三种方法来EntityManager
:
EntityManager
JPA.em()
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似乎打算玩,我
JPA.em(String key)
带注释的方法//必须在控制器中@Transactional
获取EntityManager
实例//而不是采用String键的其他方法。那是错的!行。这很好。
JPA.em()
但是,我想了解;
@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());
}
EntityManager
EntityManager
JPA.em()
时使用了EntityManager
的内容
//"默认"似乎是迄今为止唯一适用于此的关键...... JPA.em("default")
醇>
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("defaultPersistenceUnit"); EntityManager em = entityManagerFactory.createEntityManager();
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
?