有一个包含以下各列的表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的值。
答案 0 :(得分:0)
您应该定义一个双向关联,然后将级联类型设置为删除:
index
然后像这样删除即可达到目的:
home