我在 JBoss AS 7.1 上使用 Hibernate,在创建新实体并将现有实体设置为 ManyToOne 关系时遇到问题。在使用以下代码之前查询现有实体(客户):
TypedQuery<Customer> query = em.createNamedQuery("Customer.findByLastNameLike", Customer.class);
query.setParameter("lastName", "%"+lastName+"%");
return query.getResultList();
当我在设置为 order后em.persist(order)
在新实体上执行时,会引发以下异常:order
customer
order.setCustomer(customer)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: erp.model.persons.Customer
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:717)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:710)
at org.hibernate.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:49)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:437)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:266)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:138)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853)
实体定义如下:
@Entity
public class Order extends AbstractEntity implements Serializable {
private static final long serialVersionUID = -8061887078955032972L;
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST}, optional = false)
private Customer customer = null;
@Entity
@DiscriminatorValue("customer")
public class Customer extends Person implements Serializable {
private static final long serialVersionUID = 2788107135840578322L;
@OneToMany(cascade=CascadeType.ALL, mappedBy="customer")
private List<Order> orders = null;
在这种情况下有什么问题?
感谢您的任何提示...