捕获 JPA 执行的连接 table 中的隐式插入和删除

Catch implicit insertions and deletions into a join table performed by JPA

我有 NEWS table 与 TAGS 一个(加入 table 称为 NEWS_TAG)和相应实体的多对多关系。

任务是获取标签,以及带有标签的新闻数量。可以在每个选择中简单地使用 COUNT 函数,但为了提高性能,我将 NEWS_COUNT 列添加到 TAGS table.

NEWS_COUNT 当具有相应标签的新闻被持久化或从数据库中删除时发生变化。

如何管理 NEWS_COUNT 属性与 JPA?如果我能以某种方式找出持久性提供程序何时修改 NEWS_TAG table 并相应地更改标签的 NEWS_COUNT ,那就太好了。

通过添加不必要的字段 (NEWS_COUNT),您必须根据每个 removeadd 操作更新实体,并且这会降低性能。你根本不需要那个字段,如果你已经正确配置了表和实体,你用于关联实体的集合类型的基础你可能会得到每个 TAGNEWS 的计数size() 函数:tag.news.size() 或者您可以在 JPQL 中使用 count 函数。

但是我不知道这个场景,也许你很少做 CRUD 操作但是你得到的计数太多了,在这种情况下最好的方法是使用 TRIGGERS 以这种方式更新该字段(如果你的数据库系统支持它) NEWS_COUNT 总是更新,你不需要在你的应用程序层做任何事情。如果您不使用数据库系统内部的机制来更新 NEWS_COUNT 字段,那么在您的应用程序层中,您 必须 更新实体并增加或减少每个 addremove 操作。