为什么EntityManager为空?
在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA。 我使用Netbeans自动生成类(“来自数据库的实体类……”和“来自实体类的会话Bean ……”)。 在SessionBean(例如UserFacade)我想获得EntityManager:
@Stateless public class UserFacade extends AbstractFacade { @PersistenceContext(unitName = "CollDocPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } }
但是当我通过上面的方式得到它时,我得到了null。 当我通过:
@Override protected EntityManager getEntityManager() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("CollDocPU"); EntityManager ecm = emf.createEntityManager(); return ecm; }
ecm不是null,没关系
我的persistence.xml:
org.apache.openjpa.persistence.PersistenceProviderImpl model.entity.StudentAddSolution model.entity.Lecturer model.entity.Solution model.entity.Student model.entity.Course model.entity.File model.entity.CourseHasLecturer model.entity.Mail model.entity.StudentAtCourse model.entity.Roles model.entity.Task model.entity.User false
从中获取非EntityManager
@PersistenceContext(unitName = "CollDocPU") private EntityManager em;
我必须更改我的persistance.xml,将事务类型更改为“JTA”并添加:
java:openejb/Resource/myDatabase java:openejb/Resource/myDatabaseUnmanaged
之后,我必须在我的服务器配置中声明资源:在[tomee安装文件夹] /conf/tomee.xml文件中:
JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull UserName jkitaj Password pass, JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull UserName jkitaj Password pass, JtaManaged false
看这里:
http://mobiarch.wordpress.com/2012/12/07/configuring-a-mysql-data-source-in-tomee/
persistence.xml文件应位于META-INF文件夹下。 请查看此文档以了解结构。