Spring+Hibernate+JPA常见小问题


Spring+Hibernate+JPA常见小问题
2011年05月17日
  这里,列一些使用JPA常见的问题,算是自己的笔记,希望可以帮到你的小忙。
  1、jpa包的冲突
  2、事务不正常执行
  3、Cannot proxy target class because CGLIB2 is not available
  1、jpa包的冲突
  运行 jpa 程序,却出现:
  Caused by: java.lang.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中我们这样写:
  ===============================================================================
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  ===============================================================================
  其他都是正常的情况下,使用 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主要是针对类的代理。

猜你喜欢

转载自ydys76ydys.iteye.com/blog/1358872