Облицовка проблемы с вставкой объекта в базу данных. Я использую Hibernate JPA.Нарушение целостности нарушено - родительский ключ не найден - OneToOne и ManyToOne
У меня есть таблицы Напоминание и напоминание и каждое напоминание будут содержать текущий статус ReminderAction (то есть OneToOne) и конец транзакции. На каждом напоминании будет много напоминаний (с другим статусом).
DB Table columns are
REMINDER --> REMINDER_ID (PK), CURRENT_ACTION_ID (FK)...
REMINDER_ACTION --> REMINDER_ACTION_ID (PK), REMINDER_ID (FK)...
Reminder Entity
---------------------
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "REMINDER_SEQ_STORE")
@Column(name = "REMINDER_ID", unique = true, nullable = false, precision = 22, scale = 0)
public Integer getReminderId() {
return reminderId;
}
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, targetEntity = ReminderAction.class)
@JoinColumn(name = "CURRENT_ACTION_ID")
public ReminderAction getCurrentAction() {
return currentAction;
}
ReminderAction Entity
---------------------
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="REMINDER_ACTION_SEQ_STORE")
@Column(name = "REMINDER_ACTION_ID", unique = true, nullable = false)
public Integer getReminderActionId() {
return reminderActionId;
}
@ManyToOne(cascade=CascadeType.ALL,targetEntity=Reminder.class)
@JoinColumn(name="REMINDER_ID")
public Reminder getReminder() {
return reminder;
}
DAO
---
public void saveOrUpdate(final E transientObject) {
getCurrentSession().saveOrUpdate(transientObject);
getCurrentSession().flush();
}
Во saveOrUpdate, зимуют получает последовательность для напоминания и ReminderAction из БД
Hibernate: select REMINDER_SEQ.nextval from dual
Hibernate: select REMINDER_ACTION_SEQ.nextval from dual
Но во флеш() спящий режим пытается вставить ReminderAction первый и из-за ReminderID в ReminderAction равна нулю его бросок ORA-02291: нарушение целостности (REMINDER_ACTION_FK) нарушено - родительский ключ не найден
Ниже приведены темы и проблемы em из-за триггера в БД. Но у меня нет триггеров для таблицы напоминаний и напоминаний в базе данных.
Как я могу попросить зимуют вставить напоминание первый затем ReminderAction?
UPDATE:
Я пытался путем удаления SequenceGenerator от напоминания и ReminderAction и вручную установить идентификаторы во время saveOrUpdate и в конечном итоге с тем же исключением
Reminder rem = (Reminder)transientObject;
rem.getCurrentAction().setReminderId(5);
rem.getCurrentAction().setReminderActionId(5);
rem.setReminderId(5);
getCurrentSession().saveOrUpdate(transientObject);
getCurrentSession().flush();
Hibernate: insert into REMINDER_ACTION (REMINDER_ID, REMINDER_ACTION_ID) values (?, ?)
binding parameter [1] as [INTEGER] - 5
binding parameter [2] as [INTEGER] - 5
SQL Error: 2291, SQLState: 23000
ORA-02291: integrity constraint (REMINDER_ACTION_FK) violated - parent key not found
Любая помощь высоко ценится. Благодарю.