Java n-m和@version
缓存Java n-m和@version,java,sql,hibernate,caching,Java,Sql,Hibernate,Caching,缓存文章和标记之间的n-m关系,这是我的DDL: CREATE TABLE TAG_ARTICLE ( articles_id BIGINT NOT NULL, tags_id BIGINT NOT NULL, CONSTRAINT "TAG_ARTICLE_pkey" PRIMARY KEY(articles_id, tags_id), CONSTRAINT fk6xn1snukol646eslcghksu1s9 FOREIGN KEY (articles_id) RE
文章
和标记
之间的n-m关系,这是我的DDL:
CREATE TABLE TAG_ARTICLE (
articles_id BIGINT NOT NULL,
tags_id BIGINT NOT NULL,
CONSTRAINT "TAG_ARTICLE_pkey" PRIMARY KEY(articles_id, tags_id),
CONSTRAINT fk6xn1snukol646eslcghksu1s9 FOREIGN KEY (articles_id)
REFERENCES public.TAG (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE,
CONSTRAINT fkrecpkpqx4li97ri4xl0e1j9rf FOREIGN KEY (tags_id)
REFERENCES public.ARTICLE(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
)
WITH (oids = false);
这是我在文章中的m部分
:
/**
* The m-part of the n-m relation. The non-owning-side.
*/
@Deprecated
@ManyToMany(mappedBy="articles")
public Set<Tag> getTags() {
return tags;
}
效果很好。这两个表中都有很多条目,我引入了@Version
字段来检查是否必须像这样清除内部缓存
SELECT max(version) FROM TAG;
SELECT max(version) FROM ARTICLE;
不幸的是,TAG\u文章
没有version
-列,但是如果某个成员不再是团队的一部分,我需要清除缓存
什么是好的解决方案?您不应该这样做缓存,Hibernate有其他方法在您更新数据时自动使缓存无效。除此之外,删除文章时应该更新标签的版本,因为它是文章的“所有者”relation@ChristianBeikov更新所有者(仅版本,即使未更改)听起来不是一个好的解决方案,因为如果另一个应用程序采用相反的方式:作为拥有方的非拥有方将无法信任版本字段,因为非拥有方可能更新。但我看到你理解这个问题,即使描述很复杂。我不确定我是否理解你所说的“非所有权方可能更新”的意思。毕竟,您应该更详细地介绍如何执行缓存失效。您是否定期(即每分钟)检查版本?是否有其他可能更新数据的应用程序?
SELECT max(version) FROM TAG;
SELECT max(version) FROM ARTICLE;