我正在调查此EntityManager tutorial,我了解您可以在EM
中描述您的persistence.xml
或使用注释。
所以我创建了类似于这个类的东西:
package org.superbiz.injection.jpa;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.Query;
import java.util.List;
@Stateful
public class Movies {
@PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
public void addMovie(Movie movie) throws Exception {
entityManager.persist(movie);
}
public void deleteMovie(Movie movie) throws Exception {
entityManager.remove(movie);
}
public List<Movie> getMovies() throws Exception {
Query query = entityManager.createQuery("SELECT m from Movie as m");
return query.getResultList();
}
}
我有例外:
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011047: Component class com.epam.rudenkov.controller.BookStore for component com.epam.rudenkov.controller.BookStore has errors:
JBAS011440: Can't find a persistence unit named movie-unit in deployment \"book_store.war\""}}
问题:
persistence.xml
?unitName
? 答案 0 :(得分:1)
我知道您可以在persistence.xml中描述您的EM或使用注释。
这不准确。您可以通过persistence.xml配置持久性上下文 - 用于构造 EntityManagerFactory 。顾名思义,它是一个用于创建Entity Manager实例的工厂。
通过@PersistenceContext
注释将持久性上下文( EntityManager )注入EJB。
我是否应该创建persistence.xml?
是的,这在使用JBoss AS时是必需的。
来自WildFly 8 JPA参考指南(但一般适用):
persistence.xml包含持久性单元配置(例如数据源名称),并且如JPA 2.0规范(第8.2节)中所述,其META-INF目录包含persistence.xml文件的jar文件或目录称为根持久性单位。在Java EE环境中,持久性单元的根必须是以下之一(直接引自JPA 2.0规范):
unitName是什么?
(可选)persistence.xml文件中定义的持久性单元的名称。如果指定了unitName元素,则可在JNDI中访问的实体管理器的持久性单元必须具有相同的名称。
所以你必须在persistence.xml中拥有诸如<persistence-unit name="movie-unit">
之类的东西。
请注意,如果您配置了单个持久性单元,则unitName
不是必需的。
答案 1 :(得分:0)
您可以在 mapping.xml (非persistence.xml)文件中描述映射或使用注释。您需要persistence.xml信息来创建实体管理器。 “unitName”是指persistence.xml文件中persistence-unit的“name”属性。