【问题标题】:Spring Boot update field in database hardcoded硬编码数据库中的 Spring Boot 更新字段
【发布时间】:2020-04-11 18:58:55
【问题描述】:

我的仓库里有这个

@Transactional
@Modifying
@Query(value = "UPDATE pengajuan u set u.status_approval ='Komite' where u.id_pengajuan =:idPengajuan",
        nativeQuery = true)
void updateStatusPengajuan(@Param("statusApproval") String statusApproval, @Param("idPengajuan") Integer idPengajuan);

我想通过 'idPengajuan' 将 status_approval 设置为 'Komite'

现在我的服务中有这个

    public PengajuanK3 update(String statusApproval,int idPengajuan){
    return pengajuanK3Repository.updateStatusPengajuan(statusApproval, idPengajuan);
}

我有点困惑我如何在服务中调用存储库,因为在存储库中是 void 类型。

【问题讨论】:

  • 好吧,您将返回类型更改为 void,然后删除 return。请注意,您的存储库方法是错误的:它忽略了其中一个参数。
  • @JBNizet 查询对吗?用于硬编码?或者我需要在我的控制器中添加一些东西?
  • @YohanesEAC 为什么要在 updateStatusPengajuan 方法中发送 statusApproval 作为参数?

标签: spring jpa nativequery


【解决方案1】:

您使用的查询始终将status_approval 设置为Komite。从这个意义上说,您不需要在存储库更新方法中传递参数。一切都很好。

但是,如果您想从“Komite”以外的参数动态更新status_approval,请执行以下操作:

存储库:

@Transactional
@Modifying
@Query(value = "UPDATE pengajuan u set u.status_approval =:statusApproval where u.id_pengajuan =:idPengajuan",
    nativeQuery = true)
void updateStatusPengajuan(@Param("statusApproval") String statusApproval, 
@Param("idPengajuan") Integer idPengajuan);

并在您的服务中将返回类型更改为 void 并删除返回。

 public void update(String statusApproval,int idPengajuan){
     pengajuanK3Repository.updateStatusPengajuan(statusApproval,idPengajuan);
}

在你的控制器中,调用更新方法:

service.update('Komite', 1);

我更喜欢这种方式而不是硬编码,因为将来如果您需要将status_approval 设置为其他值,您可以通过以下方式完成:

service.update('othervalues', 1);

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多