Spring-Data-Jpa出现的问题
今天第一次学习这个,出现的问题太多了,记录下。
最害怕的问题就是Jar包兼容,这里面需要两个重要的依赖包。这两个包的版本需要匹配才能正常使用。
我这里只知道 Jpa用1.0.3,commons用1.1.0,或者1.3.0。还有最新版本的Jpa 1.3.0和commons的1.5.0可以兼容。
如果,版本不兼容会出现:
src-resolve: Cannot resolve the name 'repository:auditing-attributes' to a(n) 'attribute group' component.
第二个问题,如果在biz或者叫service层的实现类的方法里,忘了写@Transactional注解标签。即使程序运行成功,没有报错,但是数据并没有保存进去。
默认情况下,Spring Data JPA 实现的方法都是使用事务的。针对查询类型的方法,其等价于 @Transactional(readOnly=true);增删改类型的方法,等价于 @Transactional。可以看出,除了将查询的方法设为只读事务外,其他事务属性均采用默认值。
java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode
这一段异常在网上查:说是包冲突,我用的是MyEclipse,里面的JEE包冲突了,去掉Jee包自己添加Jstl,servlet等等包即可!
第三个问题:持久层接口继承 Repository 并不是唯一选择。Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。
public interface UserDao extends Repository<AccountInfo, Long> { …… } @RepositoryDefinition(domainClass = AccountInfo.class, idClass = Long.class) public interface UserDao { …… }
出现
java.lang.ClassCastException: $Proxy23 cannot be cast to org.springframework.data.repository.Repository
我把包换成最新的Jpa 1.3.0和commons的1.5.0可以兼容。
真搞不懂,这坑爹啊,为啥要这样折腾人捏!~