У меня есть эти классы.Удалить связь один к одному
@Entity
@Table(name ="a")
class A{
private Integer aId;
private B b;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_a")
public Integer getAId() {
return aId;
}
@OneToOne(mappedBy = "a", cascade={CascadeType.ALL})
public B getB() {
return b;
}
}
@Entity
@Table (name= "b")
class B{
private A a;
@OneToOne
@JoinColumn(name = "id_a")
public A getA() {
return a;
}
}
И таблицы выглядеть следующим образом:
A) | id_A | .... другие поля ... |
B) | id_B | fk_id_A | ..другие поля .. |
Но, когда я пытаюсь удалить экземпляр, я получаю,
org.hibernate.ObjectDeletedException: удаленный объект будет вновь спасен каскада: (удалить удаленный объект от ассоциаций) [B # 130]
Я попытался установить нуль на перекрестных ссылках:
b.setA(null)
a.setB(null)
Но исключение все равно бросается.
Все, что я выполнил, это удалить строку в A и оставить значение внешнего ключа B, но когда я попытаюсь удалить B, получите ту же ошибку.
Это мой код удаления:
public static void delete(Object object) throws Exception {
Transaction tx = getSession().beginTransaction();
try {
getSession().delete(object);
tx.commit();
} catch (Exception ex) {
tx.rollback();
getSession().close();
throw ex;
}
}
getSession
всегда возвращает действительный сеанс.
Есть ли что-нибудь, что мне не хватает?