hi Jerry,
I could not reproduce this problem and I am using the trunk level code.
11256 callback TRACE [main] openjpa.jdbc.SQL - <t 16785420, conn 20448186>
executing prepstmnt 2721032 INSERT INTO EntityA (id) VALUES (?) [params=(int) 1]
11276 callback TRACE [main] openjpa.jdbc.SQL - <t 16785420, conn 20448186>
[20 ms] spent
java.lang.IllegalArgumentException: refresh can not be invoked on
"callback.EntityA-1". This entity is either detached or not persistent or null.
at
org.apache.openjpa.persistence.EntityManagerImpl.assertValidAttchedEntity(EntityManagerImpl.java:1344)
at
org.apache.openjpa.persistence.EntityManagerImpl.refresh(EntityManagerImpl.java:744)
at
org.apache.openjpa.persistence.EntityManagerImpl.refresh(EntityManagerImpl.java:731)
at callback.TestCallback.testRefreshOnDetachedEntity(TestCallback.java:68)
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 junit.framework.TestCase.runTest(Unknown Source)
at junit.framework.TestCase.runBare(Unknown Source)
at junit.framework.TestResult$1.protect(Unknown Source)
at junit.framework.TestResult.runProtected(Unknown Source)SUCCESS: Refresh
detached
Here is my test code snippet:
public void testRefreshOnDetachedEntity() {
try {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
EntityA a = new EntityA();
a.setId(2);
em.persist(a);
em.flush();
em.detach(a);
em.refresh(a);
System.err.println("ERROR: No exception from em.refresh(detached)");
} catch (IllegalArgumentException e) {
e.printStackTrace();
System.out.println("SUCCESS: Refresh detached");
} catch (Exception e) {
e.printStackTrace();
System.err.println("ERROR: Unexpected exception from
em.refresh(detached): " + e.toString());
}
}
----- Original Message ----
From: Jerry Carter <[email protected]>
To: [email protected]
Sent: Thu, March 11, 2010 9:21:13 AM
Subject: Refreshing detached entities
Possible gap in my understanding, but I would expect an exception in this case
based on section 3.2.5 of the JPA 2.0 specification: "If [entity] X is new,
detached, or removed entity, the IllegalArgumentException is thrown".
try {
TestEntity refreshDetached = new TestEntity("refresh detached");
em.persist(refreshDetached);
em.flush();
em.detach(refreshDetached);
em.refresh(refreshDetached);
logger.error("ERROR: No exception from em.refresh(detached)");
} catch (IllegalArgumentException e) {
logger.info("SUCCESS: Refresh detached");
} catch (Exception e) {
logger.error("ERROR: Unexpected exception from em.refresh(detached): " +
e.toString());
}
ERROR: No exception from em.refresh(detached)