如何让Spring Data将Getter方法结果保存为MongoDB字段?
如何让Spring Data将Getter方法的结果保存为MongoDB字段?
问题根源
Spring Data MongoDB默认基于实体的字段做映射持久化,只给Getter方法加@Field注解没法让框架自动把方法返回值存成MongoDB字段——因为框架需要一个可写入的属性(对应实体类里的字段,通常搭配Setter方法)来处理持久化逻辑。
解决方案
最直接的处理方式是在Score类里新增对应字段,结合JPA生命周期注解,在保存/更新前自动计算并赋值:
public class Score { // 原有业务字段 private BigDecimal fareTotal; private int count; // 新增用于持久化的averageFare字段,指定MongoDB中的字段名 @Field("averageFare") private BigDecimal averageFare; // 保存/更新前自动计算平均值 @PrePersist @PreUpdate private void calculateAverageFare() { if (count > 0) { this.averageFare = fareTotal.divide(BigDecimal.valueOf(count), RoundingMode.HALF_EVEN); } } // 原有Getter方法,直接返回计算后的字段值 public BigDecimal getAverageFare() { return averageFare; } // 其他字段的Getter/Setter方法... }
补充说明
@PrePersist:在实体首次存入MongoDB前触发计算@PreUpdate:在实体更新时重新计算平均值,保证数据一致性- 如果不需要在内存中保留
averageFare字段,也可以保留原有getAverageFare()的计算逻辑,但必须搭配字段和生命周期注解,才能让Spring Data识别并持久化这个值
内容的提问来源于stack exchange,提问作者user331465
相关产品推荐
相关产品推荐

