Hibernate尝试删除以前删除的行

时间:2018-09-06 07:05:20

标签: java hibernate jpa

有一个包含以下各列的表A

id bigint NOT NULL,
b_id bigint
 CONSTRAINT fk1b51366dc7a1b06c FOREIGN KEY (b_id)
      REFERENCES B (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

现在我有一个对象objectB,该对象的字段引用了表A中的值

@OneToOne(fetch = EAGER, cascade = PERSIST, mappedBy = "b")
private A a;

我尝试首先从数据库中删除与objectB关联的表A中的值。

    if (objectB.getA() != null) {
        aRepository.remove(objectB.getA());
    }
    objectB.setA(null);

然后删除objectB

bRepository.remove(objectB);

尝试删除objectB时出现错误,因为Hibernate似乎仍想从表A中删除先前已删除的行,而我却收到此异常:

javax.persistence.OptimisticLockException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

对此有什么解决方案?即使对象B对A的引用设置为null,Hibernate为什么也要从表A中删除该值?如果我不首先从表A中删除关联的值,那么我会得到一个例外,即表A中仍引用了objectB.id的值。

1 个答案:

答案 0 :(得分:0)

您应该定义一个双向关联,然后将级联类型设置为删除:

index

然后像这样删除即可达到目的:

home