• Spring+Jpa整合的过程中遇到的一个问题。。。纠结了我半天。。。


    今天在出来Spring整合Jpa,由于是刚开始整合,难免会遇到很多问题。。。。。但是今天的这个问题真的让人很郁闷。。一直提示 No PersistenceProvider specified in EntityManagerFactory configuration, and chosen PersistenceUnitInfo does not specify a provider class name either这个错误,旁边还显示着org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [beans.xml]:: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No PersistenceProvider specified in EntityManagerFactory configuration, and chosen PersistenceUnitInfo does not specify a provider class name either 这样总的错误。。。

     到网上搜了好多好多方法和案例,最后终于找到了解决的方法。。我出现的问题主要是在

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="persistenceUnitName" value="itcast" />
    </bean>

    这一块上,运行时就说这个entityManagerFactory错误。。。开始以为是class类指定的错误,网上也有一些方法说是吧LocalContainerEntityManagerFactoryBean这个类的Container这个部分去掉,我试过。。结果还是报错。。。这是一个解决方案,或许对一些人遇到的这个问题有用,但是我没有成功!

       之后有对配置文件展开了分析,考虑到了是不是persistence.xml的问题,它是放到src源文件夹下自己建的WEB-INF文件夹下面的,代码如下

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" 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_1_0.xsd">
      <persistence-unit name="itcast" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
          <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
          <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
          <property name="hibernate.connection.username" value="root"/>
          <property name="hibernate.connection.password" value="123456"/>
          <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3308/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
          <property name="hibernate.max_fetch_depth" value="3"/>
          <property name="hibernate.hbm2dd1.auto" value="update"/>
        </properties>
      </persistence-unit>
    </persistence>

    这一次解决方案是对里面添加了 <provider>org.hibernate.ejb.HibernatePersistence</provider>这一行代码,指定了这个类,之后再运行测试类,运行后又出现了错误。。

    java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class

    现在又出现了这个错误。。,之后我又考虑了一下,到网上找了几个解决方案,最后总结了一下是jar包的问题,我是用的hibernate的包的版本是3.5.6的版本,有很多jar包都被里面hibernate3.0.jar集合了进去,比如:

    hibernate3.5中的hibernate3.0包,已经包涵了hibernate-annotations,hibernate-commons-annotations.jar,commons-collections 这三个包,所以应该去掉commons-collections 包。但是我采取了另一种解决方案,移除hibernate-annotations,hibernate-commons-annotations.jar,成功。
    移除了persistence.jar和ejb3-persistence.jar,添加了hibernate-jpa-2.0-api-1.0.0.Final.jar,最后运行测试类的时候,总算能够成功的运行了,出现了那个成功的结果,真的很令人兴奋。。。

      今天在这里把这点小经验和大家分享一下,希望大家能有点帮助。。

  • 相关阅读:
    关于程序员的段子,你能读懂几个?网友:你若全对算我输!
    【C++学习笔记】超详细C++注释的使用方法,不赶紧收藏就错过啦!
    做编程容易短命?衷心建议:三十六计,“保命”要紧
    【C++学习笔记】C++异常处理!你绝对不能错过的干货!
    Linux Socket套接字出现问题怎么办?教你5个方法“有备无患”
    【致敬伟大的程序员】写代码写进国博,这么牛的还有谁?
    重要的事情说三遍:局部变量一定要初始化!你做到了吗?
    自我介绍
    .NET应用程序中嵌入VB6表单
    在VB6中使用。net DLL
  • 原文地址:https://www.cnblogs.com/shunxiyuan/p/2165500.html
Copyright © 2020-2023  润新知