我正在开发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"
}
答案 0 :(得分:0)
这是因为通过Da_Alert
传递的RequestBody
对象不包含任何ID。要么在对象内传递ID(最好是,然后删除PathVariable
),要么在update
内设置ID。然后只有这样,您才会更新而不保存新实例