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

通过JPA Repository保存Java对象是否正确?自定义插入SQL执行无反应无报错

问题解决方法
  • 补充必要的DML操作注解
    Spring Data JPA中所有INSERT/UPDATE/DELETE这类修改数据的操作,仅用@Query注解不会被识别为写操作,必须添加@Modifying注解告知框架当前是DML操作,同时需要添加事务保证操作执行,修正后的代码如下:
@Modifying
@Transactional
@Query(value = "insert into MonthlyGcsBillPaymentL(MONTHLYBILL_PAYMENT_ID,GCS_SEQUENCENO," +
            "BILLING_CYCLEID," +
            "GCS_ACCOUNT_ID," +
            "BILL_DUE_DATE," +
            "MONTHLY_BILL_AMOUNT," +
            "BILL_PAID_DATE," +
            "INACTIVITY_FEE," +
            "COLLECTOR_STATUS," +
            "COLLECTOR_STARTDATE," +
            "GCS_SERVICE_FEE," +
            "BANK_SERVICE_FEE) "
            + "VALUES (:#{#obj.monthlybillPaymentId},:#{#obj.gcsSequenceno},:#{#obj.billingCycleid},:#{#obj.gcsAccountId}, " +
            " :#{#obj.billDueDate}, :#{#obj.monthlyBillAmount}, :#{#obj.billPaidDate},:#{#obj.inactivityFee}, :#{#obj.collectorStatus},  :#{#obj.collectorStartdate} , :#{#obj.gcsServiceFee}, :#{#obj.bankServiceFee} )", nativeQuery = true)
public void saveMonthlyBillPaymentCollectorInfo(@Param("obj") MonthlyGcsBillPaymentL obj) {
}
  • 检查SpEL参数映射是否正确
    确认:#{#obj.xxx}中的属性名和MonthlyGcsBillPaymentL实体类的属性名完全一致,严格匹配大小写和拼写,必须和实体类的getter方法对应。
  • 检查原生SQL的元数据匹配
    确认SQL中的表名MonthlyGcsBillPaymentL、所有字段名和数据库中实际的表、字段完全匹配,原生查询严格区分大小写,拼写错误会导致操作失效。
  • 开启SQL日志排查隐藏问题
    在项目配置文件中添加如下配置,打印实际执行的SQL和绑定的参数,可快速定位参数错误、约束违反等不直接抛出的异常:
spring:
  jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true
logging:
  level:
    org.hibernate.type.descriptor.sql.BasicBinder: trace
  • 确认事务提交逻辑正常
    如果业务层调用该方法时外层已经配置了事务,确认事务没有被标记为回滚,导致插入操作被静默撤销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:03