Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Issues with remove jta, eclipselink with a relational object..

Sorry to repost but anyone having a solution for this problem .. ? I
am totally struck ..

On Tue, Jul 10, 2012 at 1:05 PM, vaidya nathan <vaidyaatdst@xxxxxxxxx> wrote:
> Greetings,
>
> I am having issues with delete on a table which connects two entities
> but otherwise is independant(No cascade,etc).  I keep getting
> Caused by: java.lang.IllegalArgumentException: Entity must be managed
> to call remove: UserRole@595, try merging the detached and try the
> remove again.
>
> Following is my model.I have a class UserRole which is defined as follows
>
> @Entity
> @Table(name="USER_ROLE",
> uniqueConstraints={@UniqueConstraint(columnNames={"USER_ID",
> "ROLE_ID"})})
> public class UserRole extends PersistableObject implements
> Effectivity<EffectivePeriodWithEnable>
> {
>     @OneToOne(fetch=FetchType.EAGER)
>     @JoinColumn(name="USER_ID", nullable=false)
>     private User user ;
>     @OneToOne(fetch=FetchType.EAGER)
>     @JoinColumn(name="ROLE_ID", nullable=false)
>     private Role role ;
>     @Column(name="DEFAULT_ROLE", nullable=false)
>     private Boolean defaultRole ;
>     @Embedded
>     private EffectivePeriodWithEnable span ;
> }
> which basically is a relation between User and Role with some
> attributes defined in the relation like the defaultRole and a span
> when the relation would be active/inactive.
>
>
> User is like this
> public class User extends PersistableObject
> {
>         @Column(name="LOGIN", nullable=false, unique=true, length=20)
>         private String loginName;
>     @Column(name="FIRST_NM", nullable=false, length=35)
>     private String firstName;
>     @Column(name="MID_NM", nullable=true, length=25)
>     private String middleName;
>      ...etc...etc(Not relevant to this discussion)
> }
>
> @Entity
> @Table(name="ROLE")
> public class Role extends PersistableObject
> {
>     @Column(name="NAME", nullable=false, unique=true, length=50)
>         private String name;
>
>     @Column(name="DESCRIPTION", nullable=true, length=255)
>         private String description;
> ....etc...etc(Not relevant to this discussion)
> }
>
>  I have a method defined in the DAO something like this
>
> public void setRoles(User user, List<Role> roles,
> EffectivePeriodWithEnable p) throws DAOException
>     {
>         try
>         {
>             ExpressionBuilder eb = new ExpressionBuilder(UserRole.class) ;
>             Expression exp = eb.get("user").equal(user) ;
>             List<UserRole> uroles = (List<UserRole>)
> getObjects(UserRole.class, exp);
>             EntityManager entityManager = getEntityManager() ;
>
>             if (uroles != null)
>             {
>                 for (UserRole urole: uroles)
>                 {
>                     // I have tried this with and without merge . I
> dont think that i should do a merge since the getobjects (which
> internally uses ReadAllQuery to fetch
>                     // the object is just got here in this method..
>                     getEntityManager().remove(getEntityManager().merge(urole));
>                 }
>              }
>             }
>         }
>
> I am running in a jta container and these methods are called within an
> ejb method call . When it runs and tries to remove , following is what
> i get
>
>
> Caused by: java.lang.IllegalArgumentException: Entity must be managed
> to call remove: com.abc.hps.vvv.security.bom.helpers.UserRole@595, try
> merging the detached and try the remove again.
>         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.performRemove(UnitOfWorkImpl.java:3559)
>         at org.eclipse.persistence.internal.jpa.EntityManagerImpl.remove(EntityManagerImpl.java:518)
>         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:365)
>         at $Proxy640.remove(Unknown Source)
>         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.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
>         at $Proxy640.remove(Unknown Source)
>         at com.abc.hps.vvv.common.dao.eclipselink.EclipseLinkDAO.deleteObject(EclipseLinkDAO.java:179)
>         at com.abc.hps.vvv.dao.eclipselink.EclipseLinkSecurityDAO.setRoles(EclipseLinkSecurityDAO.java:212)
>         at com.abc.hps.vvv.security.impls.vvvSecurityImpl.setRoles(vvvSecurityImpl.java:401)
>         at com.abc.hps.vvv.security.impls.vvvSecurityImpl.setRoles(vvvSecurityImpl.java:412)
>         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.invokeTarget(MethodInvocation.java:122)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
>         at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
>         at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
>         at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
>         at sun.reflect.GeneratedMethodAccessor369.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
>         at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1937287906.invoke(InvocationContextInterceptor_z_fillMethod_1937287906.java)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
>         at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1937287906.invoke(InvocationContextInterceptor_z_setup_1937287906.java)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
>         ... 96 more
> 12:51:28,665 INFO  [STDOUT]:152 12:51:28,664 TRACE
> [ClassPathXmlApplicationContext]:301 Publishing event in
> ApplicationContext 'vvvWebBeanFactory':
> org.springframework.security.access.event.PublicInvocationEvent[source=FilterInvocation:
> URL: /abcrw/js/abc/assets/set2/delete_16.png]
>
> We are using eclipselink 2.4.0 and are running in a jboss 5.1.0.GA
> container.  Please help !!! I just dont understand why it is not able
> to remove .. May be i am missing something
>
> Cheers
> Vaidya


Back to the top