我不知道发生了什么,但在它发挥作用之前(我认为)
我们有以下错误:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
实体
@Id
@Column(name = "VIN", unique = true, nullable = false, length = 17)
public String getVin() {
return this.vin;
}
public void setVin(String vin) {
this.vin = vin;
}
控制器
@RequestMapping(value = "update", method = RequestMethod.POST)
public String updateCar(ModelMap model,
@ModelAttribute("objectAttribute") Car car) {
carService.update(car);
return "redirect: details";
}
页面
<form:label path="vin">VIN</form:label>
<form:input path="vin"/>
我正在做什么 - 我尝试更新对象Car,其中Primary Key为VIN。
尝试更改id(car vin)会产生上述错误,但编辑其他字段是正确的(对象已更新)。
有什么想法吗?
答案 0 :(得分:2)
您不能更改Hibernate实体的ID。这是不可改变的。
您可以删除该实体并重新创建它,但如果行具有对该实体行的外键引用,那么这显然会导致问题。这就是为什么PK应该始终被视为不可变的原因。如果您使用自动生成的纯技术ID,则无需更改实体ID的值。必须不惜一切代价避免使用功能主键,正是因为功能值总是在一天或另一天发生变化。