Я работаю с hibernate/JPA на JBoss в течение нескольких месяцев и имею один вопрос, на который я не могу найти ответ или решение.Сохранение с использованием hibernate/JPA
Похоже, при создании новых бобов сущности я не в состоянии сделать запрос, прежде чем я по крайней мере, под названием 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() в конец фрагмента дает указанную выше ошибку.
Я знаю, что объект, над которым я работаю, не сохраняется, но сохранение делает невозможным откат при возникновении ошибки.
Я считаю, что для этого есть решение, поэтому, если у кого-то есть ответ, я был бы очень благодарен. Что мне не хватает?
Возможно, ссылка на ссылку не работает. – kipz 2010-12-24 23:01:02
Исправлена ссылка и добавлен код на всякий случай. – 2010-12-27 19:18:11