Java Hibernte错误=>;EntityExistsException:具有相同标识符值的不同对象已与会话关联
我试图从SpringBootAPI在数据库中插入一个新对象,但调用PostMapping时出错 控制器Java Hibernte错误=>;EntityExistsException:具有相同标识符值的不同对象已与会话关联,java,spring-boot,hibernate,api,Java,Spring Boot,Hibernate,Api,我试图从SpringBootAPI在数据库中插入一个新对象,但调用PostMapping时出错 控制器 @PostMapping("/users/{userId}/vehicules") public ResponseEntity<String> insertVehicule(@PathVariable Integer userId, @RequestBody Vehicule body) { Utilisateur utilisa
@PostMapping("/users/{userId}/vehicules")
public ResponseEntity<String> insertVehicule(@PathVariable Integer userId, @RequestBody Vehicule body) {
Utilisateur utilisateur = UserRepository.getOne(userId);
VehiculeRepository.save(new Vehicule(VehiculeRepository.findAll().size()+1,body.getMarque(),body.getModele(),body.getImmatriculation(),
body.getMiseEnCirculation(),body.getNombreKilometre(),utilisateur,body.getComposants()));
return new ResponseEntity("Hello",HttpStatus.OK);
}
@PostMapping(“/users/{userId}/vehiclules”)
公共响应插入车辆(@PathVariable Integer用户标识,@RequestBody车辆主体){
utisulateur-utisulateur=UserRepository.getOne(userId);
VehicleRepository.save(新车辆)(VehicleRepository.findAll().size()+1,body.getMarque(),body.getModele(),body.getImmatriculation(),
body.getMiseCirculation(),body.getNombrekm(),Usilizateur,body.getComposants();
返回新的ResponseEntity(“Hello”,HttpStatus.OK);
}
等级车辆
public class Vehicule {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id = null;
@Column(name="marque")
private String marque = null;
@Column(name="modele")
private String modele = null;
@Column(name="immatriculation")
private String immatriculation = null;
@Column(name="miseEnCirculation")
private String miseEnCirculation = null;
@Column(name="nombreKilometre")
private String nombreKilometre = null;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "userId")
private Utilisateur user = null;
@Transient
private List<Composant> composants = null;
}
公共级车辆{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有整数id=null;
@列(name=“markue”)
私有字符串marque=null;
@列(name=“modele”)
私有字符串modele=null;
@列(name=“无刺激”)
私有字符串未加密=null;
@列(名称=“误循环”)
私有字符串错误循环=null;
@列(name=“nombrekm”)
私有字符串nombrekm=null;
@杰索尼奥雷
@许多酮
@JoinColumn(name=“userId”)
私用用户用户=null;
@短暂的
私有列表组件=null;
}
谢谢你的帮助
祝您愉快如果您在控制器内设置了id,JPA将尝试更新它而不是保存实体,那么您将得到异常,因为它不存在。JPA将在创建时生成id
@PostMapping("/users/{userId}/vehicules")
public ResponseEntity<String> insertVehicule(@PathVariable Integer userId, @RequestBody Vehicule body) {
Utilisateur utilisateur = UserRepository.getOne(userId);
VehiculeRepository.save(new Vehicule(null,body.getMarque(),body.getModele(),body.getImmatriculation(),
body.getMiseEnCirculation(),body.getNombreKilometre(),utilisateur,body.getComposants()));
return new ResponseEntity("Hello",HttpStatus.OK);
}
@PostMapping(“/users/{userId}/vehiclules”)
公共响应插入车辆(@PathVariable Integer用户标识,@RequestBody车辆主体){
utisulateur-utisulateur=UserRepository.getOne(userId);
VehicleRepository.save(新车辆)(null,body.getMarque(),body.getModele(),body.getImmagiculation(),
body.getMiseCirculation(),body.getNombrekm(),Usilizateur,body.getComposants();
返回新的ResponseEntity(“Hello”,HttpStatus.OK);
}
当我将setId更改为Null时,我有一个PK违规行为。您的数据库是什么?如何声明主键?确保id列标记为具有自动增量的主键。根据数据库的不同,您应该使用GenerationType.IDENTITY或SEQUENCEYes。这是我的Postgre数据库。这些表是在我运行api时自动生成的。ID被声明为主键,但我认为没有自动递增。但我认为不可能在生成后更新colunm属性