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

时间:2015-05-16 20:05:39

标签: hibernate jpa count many-to-many listener

我有NEWS表,与TAGS一个(名为NEWS_TAG的连接表)和相应的实体有多对多关系。

任务是获取标签,其中包含用其标记的新闻数量。可以在每个选项中简单地使用COUNT函数,但为了提高性能,我将NEWS_COUNT列添加到TAGS表。

当持久存储或从数据库中删除带有相应标记的新闻时,

NEWS_COUNT会被更改。

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

1 个答案:

答案 0 :(得分:1)

通过添加不必要的字段(NEWS_COUNT),您必须为每个删除添加操作更新实体,这会降低性能。您根本不需要该字段,如果您已正确配置表和实体,您用于关联实体的集合类型的基础,您可能会获得每个NEWS的计数TAG } size()函数:tag.news.size()或者您可以在JPQL中使用count函数。

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