Я работаю с hibernate / JPA на JBoss уже несколько месяцев, и у меня есть один вопрос, на который я не могу найти ответ или решение.
Похоже, что при создании новых бинов сущностей я не могу выполнить запрос до того, как по крайней мере вызову EntityManager.persist (entityBean), иначе я получаю следующую ошибку:
TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
Пример:
Job job = new Job();
Collection<Task> tasks = job.getTasks();
//entityManager.persist(job);
ActionPlan actionPlan = (ActionPlan) entityManager.createNamedQuery("ActionPlan.findByCommand").
setParameter("type", RunOperation.Install).getSingleResult();
Task task = Task.getTask(actionPlan);
task.setActionPlan(actionPlan);
tasks.add(task);
task.setJob(job);
Моя проблема в том, что я не могу вызвать createNamedQuery без предварительного сохранения «задания» (закомментированной строки). ActionPlan имеет отношение к Job, но NamedQuery (findByCommand) не включается в Job. Что меня беспокоит, так это то, что мне нужно сохранить Job, чтобы запрашивать базу данных, когда вновь созданное Job даже не интересно в этом контексте.
Перемещение вызова функции persist () в конец фрагмента приводит к вышеупомянутой ошибке.
Я знаю, что объект, над которым я работаю, не сохраняется, но постоянный делает невозможным откат в случае возникновения ошибки.
Я считаю, что есть решение для этого, поэтому, если у кого-то есть ответ, я был бы очень благодарен. Чего мне не хватает?