我遇到了一个奇怪的休眠错误,很可能是由于使用不当造成的,但我想知道是否有任何方法可以找到它的根本原因并进行补救。
目前我有一个类层次结构,如下所示:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "tbl_class_a)
public ClassA {
...
private int propA;
...
}
@Entity
@Table(name = "tbl_class_b")
public ClassB extends ClassA {
...
@Column(unique = true)
private int propB;
...
}
@Entity
@Table(name = "tbl_class_c")
public ClassC extends ClassC {
...
private int propC;
...
}
我已经广泛测试了所有三个类的对象的持久性和删除,并且一切似乎都正常执行,直到我考虑对属性的约束,特别是。关于坚持。
现在我实例化一个 C 类的对象 newObj,它的 propB 值等于所有就绪的持久对象,所有就绪对象的 propB 都具有该值。我尝试将其持久化,并且正如预期的那样,引发了违反约束并且我尝试回滚事务。我希望 newObj 的所有痕迹都会被删除,但是会发生一些非常奇怪的事情。确实删除了 C 类和 B 类表中对 newObj 的所有引用,但 A 类表中的属性仍然存在,并且据我所知无法恢复。为什么??