缓存如何用于双向关系? 例如
@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次更新来更新缓存,我不知道是否有方法做得更容易与否?我想保留ManyToOne
和ManyToMany
的第二级缓存,如何识别cahe?
感谢您的帮助:)
答案 0 :(得分:0)
我建议您查看此博文:https://www.thoughts-on-java.org/hibernate-tips-map-bidirectional-many-one-association/
检查mappedBy
属性&amp;的使用情况手动分配。如果Hibernate可以创建正确的查询,那么底层缓存实现也将正确地进行缓存。