捕获 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
),您必须根据每个 remove 或 add 操作更新实体,并且这会降低性能。你根本不需要那个字段,如果你已经正确配置了表和实体,你用于关联实体的集合类型的基础你可能会得到每个 TAG
的 NEWS
的计数size()
函数:tag.news.size()
或者您可以在 JPQL 中使用 count
函数。
但是我不知道这个场景,也许你很少做 CRUD 操作但是你得到的计数太多了,在这种情况下最好的方法是使用 TRIGGERS
以这种方式更新该字段(如果你的数据库系统支持它) NEWS_COUNT
总是更新,你不需要在你的应用程序层做任何事情。如果您不使用数据库系统内部的机制来更新 NEWS_COUNT
字段,那么在您的应用程序层中,您 必须 更新实体并增加或减少每个 add
或 remove
操作。
我有 NEWS
table 与 TAGS
一个(加入 table 称为 NEWS_TAG
)和相应实体的多对多关系。
任务是获取标签,以及带有标签的新闻数量。可以在每个选择中简单地使用 COUNT
函数,但为了提高性能,我将 NEWS_COUNT
列添加到 TAGS
table.
NEWS_COUNT
当具有相应标签的新闻被持久化或从数据库中删除时发生变化。
如何管理
NEWS_COUNT
属性与 JPA?如果我能以某种方式找出持久性提供程序何时修改 NEWS_TAG
table 并相应地更改标签的 NEWS_COUNT
,那就太好了。
通过添加不必要的字段 (NEWS_COUNT
),您必须根据每个 remove 或 add 操作更新实体,并且这会降低性能。你根本不需要那个字段,如果你已经正确配置了表和实体,你用于关联实体的集合类型的基础你可能会得到每个 TAG
的 NEWS
的计数size()
函数:tag.news.size()
或者您可以在 JPQL 中使用 count
函数。
但是我不知道这个场景,也许你很少做 CRUD 操作但是你得到的计数太多了,在这种情况下最好的方法是使用 TRIGGERS
以这种方式更新该字段(如果你的数据库系统支持它) NEWS_COUNT
总是更新,你不需要在你的应用程序层做任何事情。如果您不使用数据库系统内部的机制来更新 NEWS_COUNT
字段,那么在您的应用程序层中,您 必须 更新实体并增加或减少每个 add
或 remove
操作。