You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

标注@Transient的idMoneda属性无法更新到数据库问题咨询

问题根因与解决方案

核心问题说明

  • @Transient 注解标注的字段不会被JPA纳入持久化逻辑,数据库中存储的是moneda关联属性对应的外键字段,你当前的setIdMoneda方法仅对临时的idMoneda变量赋值,没有同步更新关联的Moneda实体对象,JPA感知不到关联关系的变化,因此外键字段一直为null。
  • 现有getIdMoneda方法存在空指针风险,当moneda为null时调用moneda.getId()会直接抛出NPE。
修复步骤

1. 修正get/set方法逻辑

修改idMoneda的存取逻辑,确保set方法同步更新关联的moneda属性,get方法做空值兼容:

// 实体类内部调整get/set逻辑
public Long getIdMoneda() {
    // 空值兼容避免NPE
    return this.moneda != null ? this.moneda.getId() : null;
}

public void setIdMoneda(Long idMoneda) {
    this.idMoneda = idMoneda;
    // 新增逻辑:同步更新关联的moneda属性
    if (idMoneda == null) {
        this.moneda = null;
        return;
    }
}

如果不方便在实体类中注入持久层组件,直接在业务逻辑层(Service层)处理关联即可:

// Service层保存/更新逻辑示例
@Transactional
public Remesa saveRemesa(Remesa remesaFromRequest) {
    Long idMoneda = remesaFromRequest.getIdMoneda();
    if (idMoneda != null) {
        // 从Moneda仓库查询对应实体,设置到Remesa对象中
        Moneda moneda = monedaRepository.findById(idMoneda).orElse(null);
        remesaFromRequest.setMoneda(moneda);
    }
    return remesaRepository.save(remesaFromRequest);
}

2. 额外校验项

  • 确认传入的idMoneda在Moneda表中存在对应记录,避免外键约束报错
  • 确认你的保存/更新方法上添加了@Transactional注解,确保事务正常提交

内容的提问来源于stack exchange,提问作者efejdlek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 04:06:11