【问题标题】:How to Spring Cache JPA nested Objects?如何 Spring Cache JPA 嵌套对象?
【发布时间】:2020-12-01 19:21:22
【问题描述】:

因此拥有具有一系列嵌套对象的域对象。 BC 是引用数据对象。这些值是我们永远不会在表中更新的静态数据 - 永远。

Class A {
   B b;
   C c;
}
 
class B {
}

class C {
}

B、C 等相当“重”,需要一些时间才能从数据库中返回。

我有一个这样写的存储库:

class MyRepository extends CrudRepository<A, Long> {
}

我需要一种缓存BC 的方法,这样每次我执行此操作时都不会查询它们。目前我每次查找A 时都会从数据库中检索BC,即使它们是静态数据:

MyRepository.findById(1L)

我知道我可以在服务级别使用 Spring Cache。但我感兴趣的是数据库级缓存。 BC 等正在许多不同的地方使用,而且还会有更多(包括 PUT/POST),因此它们都可以充分利用这些参考数据的数据库级缓存,因为使用了 Spring Cache:保存操作并没有带来太多好处.

【问题讨论】:

    标签: spring spring-data-jpa


    【解决方案1】:

    请检查是否是您想要的。

    1. maven 添加
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>5.2.2.Final</version> 
    </dependency>
    
    1. application.properies 添加
    hibernate.cache.use_second_level_cache=true
    hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
    
    1. 实体修改
    @Entity
    @Cacheable
    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class Foo {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "ID")
        private long id;
    
        @Column(name = "NAME")
        private String name;
        
        // getters and setters
    }
    

    https://www.baeldung.com/hibernate-second-level-cache

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2018-11-04
      • 2017-05-09
      相关资源
      最近更新 更多