【问题标题】:No Persistance provider for EntityManager - using Hibernate and Spring MVCEntityManager 没有持久性提供程序 - 使用 Hibernate 和 Spring MVC
【发布时间】:2012-07-09 15:44:51
【问题描述】:

我有 Spring MVC 项目。我正在使用 HSQL 数据库和 Hibernate。我在与 Spring MVC(默认为 JPA)和 Hibernate 建立连接时卡住了。 我在 Spring MVC 目录中创建了persistance.xml 文件:src/main/resources/META-INF。我也尝试将它放在 Spring MVC 目录中:Deployed Resources/webapp/WEB-INF/classes/META-INF。我不知道哪一个是正确的。我还是有同样的问题。

这是我的persistance.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> 
<persistence-unit name="entityManager">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>package.pl.models.Users</class>
    <properties>                    
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:/home/user/hsqldb/lib/my.spring.mvc/mybase" />
        <property name="javax.persistence.jdbc.user" value="user" />
        <property name="javax.persistence.jdbc.password" value="password" />

        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />          
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
    </properties>
</persistence-unit>

这是我的 Spring MVC 控制器方法体之一:

UsersHome usersHome = new UsersHome();
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("entityManager");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
usersHome.setEntityManager(entityManager);
Users user = usersHome.findByUsername(login);

当我第一次使用EntityManagerFactory 时,我收到错误消息 - 指示我的持久性单元的名称。

我的例外是:

org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is javax.persistence.PersistenceException: No Persistence 
provider for EntityManager named entityManager

而根本原因是:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named entityManager

我在EntityManagerFactory 中使用了适当的名称。大概我在Dispatcher Servlet Context 文件中犯了错误。根据 Hibernate 等,我有此代码:

<!-- Hibernate session factory -->      
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">     

    <beans:property name="dataSource">
        <beans:ref bean="dataSource" />
    </beans:property>

    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
            <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
        </beans:props>
    </beans:property>

    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>package.pl.models.Users</beans:value>                              
        </beans:list>
    </beans:property>       
</beans:bean>
<!-- Hibernate session factory end -->

<!-- <beans:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <beans:property name="persistenceUnitName" value="entityManager" />
</beans:bean> -->

<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>   

<!-- <beans:bean id="usersDao" class="hutter.pl.dao.UsersHome">
    <beans:property name="entityManagerFactory" ref="entityManagerFactory" />
</beans:bean> -->

我已经评论了bean id="entityManagerFactory"bean id="usersDao"。有必要吗?但是我无法使用未注释的bean id="entityManagerFactory" 启动我的 Web 应用程序。我收到了这个异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with 
name 'entityManagerFactory' defined in ServletContext resource 
[/WEB-INF/spring/appServlet/servlet-context.xml]: Invocation of init method failed;
nested exception is javax.persistence.PersistenceException: No Persistence 
provider for EntityManager named entityManager

【问题讨论】:

标签: spring hibernate jakarta-ee spring-mvc


【解决方案1】:

将您的 xml 文件放入 WEB-INF 文件夹。 xml 文件内容 sessionFactory 和所有存根。 并将其导入spring.xml文件如下:

<import resource="classpath:persistance.xml" />

【讨论】:

    【解决方案2】:

    抱歉,我还没有阅读您的完整问题。当我看到这个时我停了下来:persistance.xml。用persistence.xml怎么样?

    【讨论】:

    • 我想在 Hibernate 中使用 Spring MVC。据我所知,Spring 提供的对象关系映射很少。我现在正在阅读 Spring Reference static.springsource.org/spring/docs/3.1.x/…,我想知道我是否在这里混合了 JPA 和 Hibernate。我认为 Spring MVC 默认使用 JPA,我必须同时使用 Hibernate 和 JPA 或 Hibernate 作为 JPA 的 API ...
    • 我已经通过 Hibernate 生成了一些类,其中一些以Home 结尾的类正在使用@PersistanceContext EntityManager entityManager,所以我认为我必须处理持久性单元。
    • 不确定您的评论与答案有何关联...有效吗?您是否将其重命名为“persistence.xml”,(注意“e”而不是“a”)?
    • 好吧,我今晚没睡多久。这不可能是真的。我已经写了持久性的持久性...
    • 当然感谢一百万。另外:是的,它有效。我发生了另一个异常The application must supply JDBC connections。我现在必须搜索一下。
    猜你喜欢
    • 2016-11-04
    • 2012-06-21
    • 2017-01-17
    • 2014-12-15
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多