集成Spring 2.5并整合JPA常见错误

本文解决Spring项目中集成JPA和Tomcat数据连接池时遇到的问题,包括配置文件beans.xml、事务管理器transactionManager、数据源dataSource、persistence.xml配置及异常处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Spring集成jpa和集成tomcat数据连接池的配置文件的问题:

Spring的配置文件beans.xml(部分)内容如下:

<context:component-scan base-package="cn.luecc.babasport"/> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${driverClassName}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <property name="initialSize" value="${initialSize}" /> <property name="maxActive" value="${maxActive}" /> <property name="maxIdle" value="${maxIdle}" /> <property name="minIdle" value="${minIdle}" /> </bean> <!—不使用数据源,配置entityManagerFactory时使用以下配置不出现异常 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="luecc"/> </bean> --> <!—使用数据源,配置时,将数据源注入entityManagerFactory时出现下文异常 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> <property name="loadTimeWeaver"> <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> </property> </bean> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven transaction-manager="txManager"/>

        出现的异常如下:     

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

PS:若需要参考更详细信息,见:http://www.iteye.com/problems/15300

查询后找到如下解决方法:  

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean>

这里设置了transactionManager,先加载上面已经设置好的<bean id="datasource">... 
如果再加载datasource就会报错,不妨把transactionManager这个层去掉,也不会有影响。可以按照此方法解决,但是出现这种问题,也可能是Hibernate和Spring版本依赖问题,请按下面方法解决。

2. Spring的项目依赖问题

集成时,若出现以下异常:

Causedby:

java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

查询后知:spring2.5   不支持jpa2.0 ,而hibernate 3.5.0是jpa2.0的超集,所以要使用hibernate3.5.0必须使用spring3.0,否则会报出以上异常。所以,重新导入合适版本的依赖包即可解决。

PS:参考网络,详见:http://jw2007.iteye.com/blog/627582

3. 数据源配置重复问题

解决依赖问题后,若抛出异常:

java.lang.UnsupportedOperationException: Notsupported by BasicDataSource

这时,请将集成JPA时的persistence.xml中关于数据源的配置注释掉或者删除,示例如下:

<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="chen" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/babasport?useUnicode=true&characterEncoding=UTF-8" /> --> <property name="hibernate.max_fetch_depth" value="3" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties>4.利用spring的@Service注解配置时,提示找不到bean

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了 @Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。

在 spring的配置文件里面只需要加上<context:annotation-config/> 和<context:component-scan base-package="需要实现注入的类所在包"/>,可以使用base-package="*"表示全部的类。就可以使用以上注解来提高开发效率。

但是这里一定要注意:

<context:component-scan base-package="cn.luecc"/>

这里千万不要写错,今天把包的名称修正了一下,但是这里的配置没有修改,死活找不到bean,忙活了大半天,原来是这里出了错误,以后应该多多细心啊,不然累死你!!


转载于:https://www.cnblogs.com/springside6/archive/2011/07/28/2525443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值