Spring DomainClassConverter Cache

时间:2014-12-16 07:13:16

标签: spring caching spring-data-jpa

我使用的是spring-data-jpa,我试图应用spring cache abstraction。
findByEmail()方法缓存很好,但是,控制器上的retrieve()方法上的用户变量spring-data-jpa提供DomainClassConverter总是查找数据库。

在文档中,它会调用findOne()来查找资源,但@Cacheable触发器无法正常工作。
看起来像SimpleJpaRepository的实现类只调用CrudRepository而不是我创建的UserRepository并放置@Cacheable注释。

除自定义@Cacheable课程外,有没有办法将findOne()应用于DomainClassConverter

UserController.class

@RequestMapping(method = RequestMethod.GET, value = "/users/{user}")
    public ResponseEntity retrieve(@PathVariable User user) {
        logger.info("Retrieve: " + user);

        return new ResponseEntity(user.toUserResponse(), HttpStatus.OK);
    }

UserService.class

public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
    @Cacheable("Users")
    User findOne(Long id);

    @Cacheable("Users")
    User findByEmail(String email);

    User findByEmailAndPassword(String email, String password);

    Long countByEmail(String email);
}

1 个答案:

答案 0 :(得分:2)

我已经为您提交并修复了DATACMNS-620

Spring Data Commons 1.10.0 M1(Fowler)实际上不应该出现这个问题,因为我们转移到Spring Data REST RepositoryInvoker API,它明确检查了自定义覆盖。我为1.9.x错误修复分支创建了一个修复程序,以便我们为当前版本系列Evans的用户修复此问题。

如果要检查此升级到Spring Data Commons 1.9.0.BUILD-SNAPSHOT或1.10.0.BUILD-SNAPSHOT。如果您正在使用Boot,则只需设置属性spring-data-releasetrain.version并将其设置为Evans-BUILD-SNAPSHOTFowler-BUILD-SNAPSHOT