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;