Hibernate更新主键,批量更新从更新[0]返回意外行数;实际行数:0;预期:1

时间:2014-08-23 17:11:59

标签: hibernate spring-mvc

我不知道发生了什么,但在它发挥作用之前(我认为)

我们有以下错误:

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)会产生上述错误,但编辑其他字段是正确的(对象已更新)。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您不能更改Hibernate实体的ID。这是不可改变的。

您可以删除该实体并重新创建它,但如果行具有对该实体行的外键引用,那么这显然会导致问题。这就是为什么PK应该始终被视为不可变的原因。如果您使用自动生成的纯技术ID,则无需更改实体ID的值。必须不惜一切代价避免使用功能主键,正是因为功能值总是在一天或另一天发生变化。