使用 Spring Forms 和 Hibernate 保存实体时,我使用以下控制器方法(简化)来执行此操作。
@Transactional
@RequestMapping(value="/speichern", method = RequestMethod.POST)
public void saveEvent(final @ModelAttribute("__eventData") MDKEvent p_event) {
em.persist(p_event);
} // saveEvent
当我尝试使用相同的方法对其进行编辑时,我得到一个“deteched entity”异常:
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: some.package.Entity
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174)
...
它表明实体在提交表单后处于非托管状态(这是有道理的)。我怎么能保存更新的实体呢?这样做的正确方法是什么?
我正在使用 Spring 3 和 Hibernate 3.5。