[jboss-user] [EJB 3.0] - detached entity passed to persist

graflaszlo do-not-reply at jboss.com
Tue Apr 24 16:05:20 EDT 2007


Hi all,

I have an entity, named AdatlapElozetesR, wich looks like this:

  | package mypackage;
  | 
  | import java.util.*;
  | import javax.persistence.*;
  | 
  | @Entity
  | @Table(name = "ADATLAPELOZETESR", uniqueConstraints = {})
  | public class AdatlapElozetesR implements java.io.Serializable {
  | 
  | 	private static final long serialVersionUID = -7341044940631282534L;
  | 	private Integer id;
  | 	private Date datum;
  | 
  | 	public AdatlapElozetesR() { }
  | 
  | 	public AdatlapElozetesR(Integer id,
  | 	                       Date datum) {
  | 		this.id = id;
  | 		this.datum = datum;
  | 	}
  | 
  | 	public AdatlapElozetesR(AdatlapElozetesR p_adatlapelozetesr) {
  | 		this.id = p_adatlapelozetesr.getId();
  | 		this.datum = p_adatlapelozetesr.getDatum();
  | 	}
  | 
  | 	@Id
  | 	@Column(name = "id", unique = true, nullable = false, insertable = true, updatable = true)
  | 	@SequenceGenerator(name="SQC_ALE", sequenceName="ADAT.SQ_ADATLAP_ELOZETES", allocationSize=1)
  | 	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SQC_ALE")
  | 	public Integer getId() { return this.id; }
  | 	public void setId(Integer id) { this.id = id; }
  | 
  | 	@Temporal(TemporalType.DATE)
  | 	@Column(name = "datum", unique = false, nullable = false, insertable = true, updatable = true, length = 13)
  | 	public Date getDatum() { return this.datum; }
  | 	public void setDatum(Date datum) { this.datum = datum; }
  | 
  | }
  | 

To manage this entity I use a session bean:

  | package mypackage.adat;
  | 
  | import java.sql.*;
  | import java.text.Format;
  | import java.text.SimpleDateFormat;
  | import java.util.*;
  | import javax.ejb.Stateless;
  | import javax.ejb.TransactionAttribute;
  | import javax.ejb.TransactionAttributeType;
  | import javax.naming.InitialContext;
  | import javax.sql.DataSource;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | import javax.persistence.Query;
  | import org.apache.log4j.*;
  | import org.hibernate.*;
  | import org.hibernate.cfg.*;
  | 
  | import mypackage.AdatlapElozetesR;
  | 
  | @Stateless
  | public class AdatlapElozetesRBean implements AdatlapElozetesRRemote, AdatlapElozetesRLocal, java.io.Serializable {
  | 
  | 	private static final Logger log = Logger.getLogger(AdatlapElozetesRBean.class);
  | 	@PersistenceContext(unitName="persistUniter")
  | 	private EntityManager em;
  | 
  | 	public void persist(AdatlapElozetesR transientInstance) {
  | 		//AdatlapElozetesR n = new AdatlapElozetesR(transientInstance);
  | 		System.out.println((transientInstance == null ? "transientInstance NULL" :"transientInstance OK, "+transientInstance));
  | 		try {
  | 			em.persist(transientInstance);
  | 			log.debug("persist successful");
  | 		} catch (RuntimeException re) {
  | 			log.error("persist failed", re);
  | 			throw re;
  | 		}
  | 	}
  | 
  | ...
  | }
  | 
And my test client looks like this:

  | package mypackage.test;
  | 
  | import java.util.*;
  | import javax.naming.InitialContext;
  | 
  | import org.hibernate.*;
  | import org.hibernate.cfg.*;
  | 
  | import mypackage.adat.*;
  | import mypackage.*;
  | 
  | public class AdatlapElozetesRTest {
  | 
  | 	AdatlapElozetesRTest() {
  | 		System.out.println("AdatlapElozetesRTest()");
  | 	}
  | 	private void CreateAdatlapElozetesR() {
  | 		System.out.println("CreateAdatlapElozetesR()");
  | 		AdatlapElozetesR ale = new AdatlapElozetesR(new Integer(0),
  | 									 new Date());
  | 		System.out.println((ale == null ? "ale NULL" : "ale OK"));
  | 		try {
  | 			Properties properties = new Properties();
  | 			properties.setProperty("java.naming.provider.url", "jnp://localhost:1099");
  | 			properties.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
  | 			properties.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
  | 			InitialContext ctx = new InitialContext( properties );
  | 			AdatlapElozetesRInterface aei = (AdatlapElozetesRInterface)ctx.lookup("AdatlapElozetesRBean/remote");
  | 			System.out.println((aei == null ? "aei NULL" : "aei OK"));
  | 			aei.persist(ale);
  | 		} catch(org.hibernate.PersistentObjectException poex) {
  | 			System.out.println("feliras()\n"+poex);
  | 			//ex.printStackTrace();
  | 		} catch(Exception ex) {
  | 			System.out.println("feliras()\n"+ex);
  | 			//ex.printStackTrace();
  | 		}
  | 	}
  | 	public static void main(String[] args) {
  | 		AdatlapElozetesRTest t1 = new AdatlapElozetesRTest();
  | 		t1.CreateAdatlapElozetesR();
  | 		t1 = null;
  | 	}
  | }
  | 
When I run the client, to insert a new row in my table I get this error:

  | 21:47:37,032 INFO  [STDOUT] transientInstance OK, mypackage.adat.AdatlapElozetes at 80d11b
  | 21:47:37,032 ERROR [AdatlapElozetesBean] persist failed
  | javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: mypackage.adat.AdatlapElozetes
  |         at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647)
  |         at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)
  |         at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:175)
  |         at mypackage.adat.AdatlapElozetesBean.persist(AdatlapElozetesBean.java:47)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:597)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
  |         at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
  |         at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
  |         at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
  |         at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |         at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:263)
  |         at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
  |         at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
  |         at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
  |         at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
  |         at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
  |         at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
  |         at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
  | Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: mypackage.adat.AdatlapElozetes
  |         at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
  |         at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
  |         at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
  |         at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
  |         at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
  |         at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:212)
  |         ... 36 more
  | 
Can somebody help me, to fix this problem?
Thank you.

My configuration is:

Windows XP,
Java VM: Java HotSpot(TM) Server VM 1.6.0_01-b06,Sun Microsystems Inc.
PostgreSQL 8.2
JBoss [Zion] 4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)
Hibernate 3.2.0.ga
Hibernate EntityManager 3.2.0.GA
Hibernate Annotations 3.2.0.GA


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040333#4040333

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040333



More information about the jboss-user mailing list