Spring二级缓存双向

时间:2018-01-09 16:17:28

标签: spring caching hazelcast second-level-cache

缓存如何用于双向关系? 例如

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "directory_id")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Service> services = new HashSet<>();

@ManyToOne(fetch = FetchType.LAZY)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Directory directory;

如果我使用关系Directory更新Service,缓存将以两种方式更新,因为sql查询将执行update directory...update service...

但是如果我使用新的Service更新directory,则sql只会在update service ...附近服务,因此目录的缓存不会更新,所以当我得到新的目录,它没有与此服务链接,旧的链接始终是此服务。

我认为更新directory的缓存,我需要更新新的缓存,所以我需要3次更新来更新缓存,我不知道是否有方法做得更容易与否?我想保留ManyToOneManyToMany的第二级缓存,如何识别cahe?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

@ yunsong-mao,我相信这不是Hazelcast或二级缓存,因为您确认双向映射已损坏:只有一方正常工作。

我建议您查看此博文:https://www.thoughts-on-java.org/hibernate-tips-map-bidirectional-many-one-association/

检查mappedBy属性&amp;的使用情况手动分配。如果Hibernate可以创建正确的查询,那么底层缓存实现也将正确地进行缓存。