【发布时间】:2025-11-27 03:50:01
【问题描述】:
我正在尝试使用 @PersistenceUnit 注入 EntityManagerFactory,但它始终为空。
我认为我的 persistence.xml 没问题,因为我可以使用以下代码获取 EntityManager:
EntityManager em = Persistence.createEntityManagerFactory("myPersistenceUnit").createEntityManager();
所以,我想知道我是否做错了什么,或者在使用 Jersey (2.23) 和 Wildfly 10 (JBoss EAP 7) 时这是不可能的。
这是我到目前为止所做的:
- 在 Eclipse 上创建了 jersey-quickstart-webapp maven 项目;
-
在我的 pom.xml 中添加了以下依赖项:
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.2.2.Final</version> </dependency> <dependency> <groupId>com.hynnet</groupId> <artifactId>oracle-driver-ojdbc6</artifactId> <version>12.1.0.1</version> </dependency> -
创建了 persistence.xml:
<persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!-- All persistence classes must be listed --> <class>com.mps.classes.TermosPesquisados</class> <properties> <!-- Provider-specific connection properties --> <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" /> <property name="javax.persistence.jdbc.url" value="JDBC_URL" /> <property name="javax.persistence.jdbc.user" value="USER" /> <property name="javax.persistence.jdbc.password" value="PASSWORD" /> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> <property name="hibernate.show_sql" value="false" /> <property name="hibernate.connection.release_mode" value="after_transaction" /> <property name="hibernate.connection.isolation" value="2" /> </properties> </persistence-unit> -
修改了MyResource.java:
@ManagedBean @Path("myresource") public class MyResource { @PersistenceUnit(unitName= "myPersistenceUnit") private EntityManagerFactory emf; @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { if(emf == null) return "emf is null"; return "emf is not null"; } } 添加了一个空 beans.xml(不确定是否有必要);
【问题讨论】:
-
附带说明,如果您是 Java 新手并且可以选择自己的工具,我建议您改用 Spring。 Spring Boot 自动配置使这种设置变得更加简单,并且无需外部容器。
-
@chrylis 同意,但可能取决于他的情况......加上过去几年 ejb 变得更容易
标签: java eclipse jersey wildfly