You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "AlexD." <al...@btelligent.de> on 2007/10/22 17:39:28 UTC
Cannot perform operation delete on detached object
Hallo all,
I have the problem that I cannot delete a detached object.
My source codes are (I'm using the spring framework):
public void delete(final int id) {
final JpaTemplate t = getJpaTemplate();
T obj = t.find(getObjectClass(), id);
if (obj != null) {
obj = t.merge(obj);
t.remove(obj);
}
}
Looks strange, but obj what I got as result is also detached object... What
I'm doing wrong?
stack trace:
org.apache.openjpa.persistence.ArgumentException: You cannot perform
operation delete on detached object
"org.apache.openjpa.enhance.com$btelligent$erp$domain$persistence$WorkTime$pcsubclass@5ee6a6".
This operation only applies to managed objects.
FailedObject:
org.apache.openjpa.enhance.com$btelligent$erp$domain$persistence$WorkTime$pcsubclass@5ee6a6
at
org.apache.openjpa.kernel.BrokerImpl.newDetachedException(BrokerImpl.java:2521)
at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2512)
at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2474)
at
org.apache.openjpa.kernel.DelegatingBroker.delete(DelegatingBroker.java:1030)
at
org.apache.openjpa.persistence.EntityManagerImpl.remove(EntityManagerImpl.java:555)
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.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:340)
at $Proxy48.remove(Unknown Source)
at org.springframework.orm.jpa.JpaTemplate$7.doInJpa(JpaTemplate.java:280)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:191)
at org.springframework.orm.jpa.JpaTemplate.remove(JpaTemplate.java:278)
at com.btelligent.erp.dao.jpa.AbstarctJpaDao.delete(AbstarctJpaDao.java:41)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy20.delete(Unknown Source)
Best regards,
Alex
--
View this message in context: http://www.nabble.com/Cannot-perform-operation-delete-on-detached-object-tf4670739.html#a13342865
Sent from the OpenJPA Developers mailing list archive at Nabble.com.
Re: Cannot perform operation delete on detached object
Posted by "AlexD." <al...@btelligent.de>.
Thank you Craig,
You are right, I have to be in transaction...
My code and your example works after relevant changes...
Best regards,
Alex
--
View this message in context: http://www.nabble.com/Cannot-perform-operation-delete-on-detached-object-tf4670739.html#a13351041
Sent from the OpenJPA Developers mailing list archive at Nabble.com.
Re: Cannot perform operation delete on detached object
Posted by Craig L Russell <Cr...@Sun.COM>.
Hi Alex,
To delete an instance you need to be in a transaction. If you are
outside of a transaction, you get detached instances for everything.
If you begin a transaction, either directly or via a framework
annotation, you should not use merge, but directly remove the
instance you found.
@Transactional // made this up
public boolean delete(final int id) {
final JpaTemplate t = getJpaTemplate(); // or ask for a
transactional instance here
T obj = t.find(getObjectClass(), id);
if (obj != null) {
t.remove(obj);
return true;
}
return false;
}
Craig
On Oct 22, 2007, at 9:03 AM, AlexD. wrote:
>
> Hallo all,
>
> I have the problem that I cannot delete a detached object.
>
> My source codes are (I'm using the spring framework):
>
> public void delete(final int id) {
> final JpaTemplate t = getJpaTemplate();
> T obj = t.find(getObjectClass(), id);
> if (obj != null) {
> obj = t.merge(obj);
> t.remove(obj);
> }
> }
>
>
> Looks strange, but obj what I got as result is also detached
> object... What
> I'm doing wrong?
>
> stack trace:
>
> org.apache.openjpa.persistence.ArgumentException: You cannot perform
> operation delete on detached object
> "org.apache.openjpa.enhance.com$btelligent$erp$domain$persistence
> $WorkTime$pcsubclass@5ee6a6".
> This operation only applies to managed objects.
> FailedObject:
> org.apache.openjpa.enhance.com$btelligent$erp$domain$persistence
> $WorkTime$pcsubclass@5ee6a6
> at
> org.apache.openjpa.kernel.BrokerImpl.newDetachedException
> (BrokerImpl.java:2521)
> at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2512)
> at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2474)
> at
> org.apache.openjpa.kernel.DelegatingBroker.delete
> (DelegatingBroker.java:1030)
> at
> org.apache.openjpa.persistence.EntityManagerImpl.remove
> (EntityManagerImpl.java:555)
> 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.springframework.orm.jpa.ExtendedEntityManagerCreator
> $ExtendedEntityManagerInvocationHandler.invoke
> (ExtendedEntityManagerCreator.java:340)
> at $Proxy48.remove(Unknown Source)
> at org.springframework.orm.jpa.JpaTemplate$7.doInJpa
> (JpaTemplate.java:280)
> at org.springframework.orm.jpa.JpaTemplate.execute
> (JpaTemplate.java:191)
> at org.springframework.orm.jpa.JpaTemplate.remove(JpaTemplate.java:
> 278)
> at com.btelligent.erp.dao.jpa.AbstarctJpaDao.delete
> (AbstarctJpaDao.java:41)
> 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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflectio
> n(AopUtils.java:296)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke
> (JdkDynamicAopProxy.java:198)
> at $Proxy20.delete(Unknown Source)
>
>
> Best regards,
>
> Alex
> --
> View this message in context: http://www.nabble.com/Cannot-perform-
> operation-delete-on-detached-object-tf4670739.html#a13342865
> Sent from the OpenJPA Developers mailing list archive at Nabble.com.
Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!