java—如何将hibernate缓存与外部更改同步

wgxvkvu9  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(318)
  1. @Entity
  2. @Table(name = "abc")
  3. @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
  4. public class Abc{
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
  7. @SequenceGenerator(name = "sequenceGenerator")
  8. private Long id;
  9. @OneToMany(mappedBy = "Abc")
  10. @Column(name = "name", nullable = false)
  11. private String name;
  12. @Cache
  13. private List<AbcAccess> accesses = new ArrayList<>();
  14. }
  1. @Entity
  2. @Table(name = "abc_access")
  3. @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
  4. public class AbcAccess {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
  7. @SequenceGenerator(name = "sequenceGenerator")
  8. private Long id;
  9. @Column(name = "name", nullable = false)
  10. private String name;
  11. @ManyToOne(optional = false)
  12. private Abc abc;
  13. }

背景:springboot+springjpa(hibernate)+ehcache,二级缓存启用。 Cacheorg.hibernate.annotations.Cache 配置(用kotlin编写):

  1. @Configuration
  2. @EnableCaching
  3. class AbcConifg{
  4. private val jcacheConfiguration: javax.cache.configuration.Configuration<Any, Any>
  5. init {
  6. val ehcache = jHipsterProperties.cache.ehcache
  7. jcacheConfiguration = Eh107Configuration.fromEhcacheCacheConfiguration(
  8. CacheConfigurationBuilder.newCacheConfigurationBuilder(
  9. Any::class.java, Any::class.java,
  10. ResourcePoolsBuilder.heap(ehcache.maxEntries)
  11. )
  12. .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(ehcache.timeToLiveSeconds.toLong())))
  13. .build()
  14. )
  15. }
  16. @Bean
  17. fun hibernatePropertiesCustomizer(cacheManager: javax.cache.CacheManager) = HibernatePropertiesCustomizer {
  18. hibernateProperties -> hibernateProperties[ConfigSettings.CACHE_MANAGER] = cacheManager
  19. }
  20. }

当我询问 Abc 从数据库中,它将结果缓存到二级缓存中。
现在我再插入一个 AbcAccess 进入数据库,然后我查询 Abc 再次从数据库中,它将只从缓存中获取结果。以及 accessAbc 不是实时的,它错过了一个 access .

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题