几个月来,我一直在 JBoss 上使用 hibernate/JPA,并且有一个问题我找不到答案或解决方案。
似乎在创建新实体 bean 时,我至少在调用 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() 的调用移动到代码段的末尾会产生上述错误。
我知道我正在处理的对象没有持久化,但是如果发生错误,持久化使得无法回滚。
我相信有一个解决方案,所以如果有人有答案,我将非常感激。我错过了什么?