每当我每次要更新记录时,都会创建一个新条目(无法更新数据库中的记录)

时间:2019-04-04 16:43:36

标签: java api

我正在开发API,每当我要使用JpaRepository方法更新记录时,每次它将创建一个新条目。 以下是我的实体类,存储库,服务和控制器。

Da_Alert(实体):

public class Da_Alert implements Serializable {
private static final long serialVersionUID = 1527460893291554177L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
int alertId;

@Column(name="alertName")
String alertName;

@Column(name="alertDescription")
String alertDescription;
    .
    .//getter/Setter
 }

Da_Alert_Repository(存储库):

     @Repository
     public interface Da_Alert_Repository extends JpaRepository<Da_Alert, 
       Integer> {

     }

Da_Alert_Service(服务):

 @Service

 public class Da_Alert_Service  {

@Autowired
Da_Alert_Repository DaAlertRepository;


public List<Da_Alert> findAll() {
    return DaAlertRepository.findAll();
}

public Optional<Da_Alert> findById(Integer id) {
    return DaAlertRepository.findById(id);
}

public Da_Alert save(Da_Alert Da_Alert) {
    return DaAlertRepository.save(Da_Alert);
}

public void deleteById(Integer id) {
    DaAlertRepository.deleteById(id);
}

}

Da_Alert_APIController(API):

 @RestController
 @RequestMapping("/api/v1/alert")
 @Slf4j
 public class Da_Alert_APIController {

@Autowired
Da_Alert_Service DaAlert_Service;

    @PutMapping("/updateAlert/{id}")
    public ResponseEntity<Da_Alert> update(@PathVariable Integer id, 
    @Valid @RequestBody Da_Alert Da_Alert) {
    if (!DaAlert_Service.findById(id).isPresent()) {
       // log.error("Id " + id + " is not existed");
        ResponseEntity.badRequest().build();
    }

    return ResponseEntity.ok(DaAlert_Service.save(Da_Alert));
    }
}

URL:

 localhost:****/api/v1/alert/updateAlert/1    (PUT)

正文:

  {
     "alertName":"update Test allert",
     "alertDescription":"Test"
     }

1 个答案:

答案 0 :(得分:0)

这是因为通过Da_Alert传递的RequestBody对象包含任何ID。要么在对象内传递ID(最好是,然后删除PathVariable),要么在update内设置ID。然后只有这样,您才会更新而不保存新实例