Я столкнулся со странной ошибкой в спящем режиме, скорее всего, из-за ее неправильного использования, но мне было интересно, есть ли способ найти основную причину и, возможно, устранить ее.
В настоящее время у меня есть иерархия классов, которая выглядит следующим образом:
@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;
...
}
Я тщательно протестировал постоянство и удаление объектов всех трех классов, и все, кажется, работает нормально, пока я не рассмотрю ограничения на свойства, особенно. что касается настойчивости.
Теперь я создаю экземпляр объекта newObj класса C со значением propB, равным полностью готовому сохраненному объекту, у которого все готовые имеют это значение для его propB. Я пытаюсь сохранить его, и, как и ожидалось, выдается нарушение ограничения, и я пытаюсь откатить транзакцию. Я ожидаю, что все следы newObj будут удалены, но происходит нечто очень странное. Все ссылки на newObj в таблицах для класса C и класса B действительно удалены, но свойства в таблице для класса A остаются, и, насколько я могу судить, безвозвратно. Почему ??