http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/
《使用 Spring Data JPA 简化 JPA 开发》这篇文章相信大家一定拜读过
但是这2天我在继续试用spring data jpa中遇到了不少挫折。
首先遇到的是原文中写到“默认情况下,Spring Data JPA 实现的方法都是使用事务的。针对查询类型的方法,其等价于 @Transactional(readOnly=true);增删改类型的方法,等价于 @Transactional。可以看出,除了将查询的方法设为只读事务外,其他事务属性均采用默认值。”但是我配置了很长一段时间,发现dao这一层没用上@Transactional注解,而在service层用上@Transactional,JPA会发出SQL语句,但是不会存储到数据库,数据被回滚了。
第二,原文中还提到“与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。”两种等价的继承接口方式示例
[code="java"] public interface UserDao extends Repository { …… }
@RepositoryDefinition(domainClass = AccountInfo.class, idClass = Long.class)
public interface UserDao { …… } [/code]
我搞了半天就是报错
[code="java"]java.lang.ClassCastException: $Proxy23 cannot be cast to org.springframework.data.repository.Repository[/code]
网上查了很多资料,包括官方文档,都没提及这种错误的原因,我反复对照配置文件,实在找不出错误所在,不知谁能解答下疑惑。使用的是spring3.1.1,hibernate4,spring data jpa 1.03