文档库 最新最全的文档下载
当前位置:文档库 › Spring+Hibernate+JPA常见小问题

Spring+Hibernate+JPA常见小问题

1、jpa包的冲突
2、事务不正常执行
3、Cannot proxy target class because CGLIB2 is not available

1、jpa包的冲突
运行 jpa 程序,却出现:
Caused by: https://www.wendangku.net/doc/3911166580.html,ng.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
这个是由于jar包的冲突了, 因为使用的是新版本的 Hibernate(这里我使用的是 Hibernate 3.6),跟 javaee.jar 里面的jpa接口冲突了
解决办法

使用 tomcat 中带的 servlet-api.jar 替换 javaee.jar

去掉 Java EE 5 Libraries

新建 user libraries 包含 jsf-api.jar jsf-impl.jar jstl-1.2.jar servlet-api.jar

就是将 MyEclipse 里面的 Java EE 5 Libraries 中的 javaee.jar 换成 servlet-api.jar

然后在工程里加入刚刚的user libraries,OK

2、事务不正常执行
在xml中我们这样写:
===============================================================================



























我还是比较习惯使用 dao 分层,service 对外接口的数据库层访问的结构,所以就加了这个 jpaTemplate
在dao中就可以注入这个jpaTemplate
-->








===============================================================================
其他都是正常的情况下,使用 jpaTemplate 的 persist 方法,却是没有反应的。
这个是为什么呢, 马上想到的是,事务根本没有启动,没有启动》???
不是已经设置了
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class) 了么。

可是,spring的配置中没有 注明 aop ,因为要切入事务,必需要aop的支持,现在我们使用的是 注解 方法实现 声明式事务
现在,只要加入aop的支持便可以了。

在配置文件中加入:


不要忘记导入相应的包:aopalliance-1.0.jar (这是我使用的)。

3、Cannot proxy target class because CGLIB2 is not available
其实之前做 Flex+Spring 时,也碰到了这样的问题,不过那时没有细细去找原因,因为一看就是没有相应的包,直接加入了包。

当执行事务的类没有实现接口时,可能会报错:
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces

这时,我们加入 cglib-2.2.jar 这个包就可以了,当然,也要加入其依赖的包:asm-3.2.jar

因为 JDK 的动态代理主要是面向接口的,当事务类没有实现任何接口时,就会报出上面的错误,而Cglib主要是针对类的代理。

相关文档
相关文档 最新文档