Hibernate -在字段中存储一个ommany - relation中元素的数量?(例如评论的数量)



我有一个实体"post",它有一组许多"评论"。现在我不想在每次显示评论数量时都计算这个集合的大小因此我想创建一个整数字段并将评论数量存储在这里。如果一个评论被发布,我想增加它,如果一个评论被删除,我想减少它。

hibernate是否提供了任何"开箱即用"的方法?还是我需要手工实现?(我认为这不是微不足道的,因为我必须考虑并发问题等)

我不知道hibernate有什么开箱即用的解决方案可以将集合的大小映射到字段。通常有两种方法可供选择,一种更新颖,而另一种更安全。

1)考虑使用预保存和预更新

像这样

public Foo {
  @OneToMany
  private List<Bar> bars;
  @Column
  private int barSize;
  @PrePersist
  @PreUpdate
  public void updateBarSize() {
    this.barSize = (bars==null ? 0 : bar.size());
  }
}

2)不允许在实体中直接操作集合,而是提供addChild(), removeChild()来操作集合,并在getChild()时返回集合的不可变克隆。通过这样做,您可以安全地跟踪大小并在调用addChild()/removeChild()时更新整数值。

例如

public Foo {
  @OneToMany
  private List<Bar> bars;
  @Column
  private int barSize;
  public List<Bar> getBars() {
    return Collections.unmodifiableList(bars);
  }
  public synchronized void addBar(Bar bar) {
    this.bars.add(bar);
    this.barSize = bars.size();
  }
}

最新更新