没有EntityManager的持久性提供程序名为persistenceUnit

时间:2014-04-29 05:58:53

标签: java hibernate jpa

我正在研究REST服务器并同时学习EJB \ hibernate。当服务调用DAO我遇到了一个无法找到我的持久性单元的问题。

@Stateless
public class HotelDAO {

@PersistenceContext(unitName = Constants.PERSISTENCE_UNIT)
private EntityManager em;


public List<HotelsEntity> getAll() {
// TODO complete me
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<HotelsEntity> criteria = builder.createQuery(HotelsEntity.class);
    Root<HotelsEntity> root = criteria.from(HotelsEntity.class);
    criteria.select(root);
    TypedQuery<HotelsEntity> resultQuery = em.createQuery(criteria);
    return resultQuery.getResultList();
}
}

在这种情况下,我得到“无法检索unitName persistenceUnit的EntityManagerFactory”

然后我试试这个:

@Stateless
public class HotelDAO {

public List<HotelsEntity> getAll() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();

    // TODO complete me
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<HotelsEntity> criteria = builder.createQuery(HotelsEntity.class);
    Root<HotelsEntity> root = criteria.from(HotelsEntity.class);
    criteria.select(root);
    TypedQuery<HotelsEntity> resultQuery = em.createQuery(criteria);
    return resultQuery.getResultList();
}
}

在这种情况下,我得到“EntityManager名为persistenceUnit的无持久性提供程序”。

我在stackoverflow上解决了类似的问题:

  • META-INF下的persitence.xml
  • DAO注入EJB
  • 在persistence.xml中提到了
  • 提供程序
  • 我不使用Spring

你有猜测吗?

<?xml version="1.0" encoding="UTF-8"?>

<persistence-unit name="persistenceUnit" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>jdbc/HospitalityDataSource</jta-data-source>
    <class>com.example.model.AmmenitiesEntity</class>
    <class>com.example.model.HotelPropertyEntity</class>
    <class>com.example.model.HotelsEntity</class>
    <class>com.example.model.InventoriesEntity</class>
    <class>com.example.model.ReservationEntity</class>
    <class>com.example.model.RoomEntity</class>
    <class>com.example.model.RoomPropertyEntity</class>
    <properties>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.connection.username" value="dbroot"/>
        <property name="hibernate.connection.password" value="password"/>
    </properties>
</persistence-unit>

的pom.xml

 <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.5.Final</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>annotations-api</artifactId>
        <version>6.0.29</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.ejb</artifactId>
        <version>3.1</version>
    </dependency>
</dependencies>

Structure

1 个答案:

答案 0 :(得分:1)

如果我没错,我认为persistence.xml必须位于src / main / resources / META-INF / persistence.xml