gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:04:07 26 4
gpt4 key购买 nike

我正在研究 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();
}
}

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

我在 stackoverflow 上检查了类似的问题:

  • META-INF 下的 persistence.xml
  • DAO 被注入(inject)到 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

最佳答案

如果我没记错的话,我认为 persistence.xml 一定位于 src/main/resources/META-INF/persistence.xml

关于java - 没有名为 persistenceUnit 的 EntityManager 持久性提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com