[jboss-user] [EJB 3.0] - Detached entity passed to persist
jactor
do-not-reply at jboss.com
Tue Sep 19 10:12:55 EDT 2006
Hi!
I receive an error when I try to persist an entity bean. I have a bean (A) which relates to another bean (B). This relation is annotated as @ManyToOne(cascade = CascadeType.ALL) and
@JoinColumn(nullable = false)
The enity bean (B) has only one property beside the autogenerated id (Long) which its name (b.getName()). This property is annotated with @Column(nullable = false, unique = true).
I use annotations over the fields of the properties.
When I persist/merge these entities I get
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: a.package.B
|
The methods which tries to persist the entities are:
| public Long saveOrUpdate(A a) {
| B b = a.getB();
| b.setId(saveOrUpdate(b));
| entityManager.flush();
|
| // If b is persisted before, the persisting gives an exception
| // I have actually never tried the merge option as a.getId() is null...
|
| if (a.getId() != null) {
| entityManager.merge(a);
|
| return a.getId();
| }
|
| entityManager.persist(a);
|
| return a.getId();
| }
|
| public Long saveOrUpdate(B b) {
| B persistedB = get(b.getName());
|
| if (persistedB != null) {
| return persistedB.getId();
| }
|
| entityManager.persist(b);
|
| return b.getId();
| }
|
Since B only have one property (name) and this is unique, my saveOrUpdate method of B only return the id of an allready saved instance. Therefore I use this id on B.setId(Long id) when the method is called.
If B has not been persisted before it works as intended, but if the instance of B is located in the database, then the exception is thrown when I try to persist A... When A is persisted (even though there is a merge option in the code, every time I use this code, I persist a new instance of A - a.getId() == null - which may have an allready persisted instance of B) this exception is thrown even if the correct id is located in the instance of B which is tried to be persisted with A.
Please help me with this exception. I thought a detached entity did not have a valid primary key (b.getId()), but this is not the case in this situation. I am growing frustrated...
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3972588#3972588
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3972588
More information about the jboss-user
mailing list