Getting this error when triing to save record

com.company.doprava.entity.UserAddress-3330329 is legitimate existing record.
Using transactionalDataManager.secure().save() for commiting

ScheduledRunnerThread-10/app-core/admin] com.company.doprava.service.HelperServiceBean - Nastala chyby v ukladani zaznamu: com.company.doprava.entity.Doprava-350732fd-7a9f-7c4b-6395-fe771605652f [detached]
java.lang.IllegalArgumentException: Object: com.company.doprava.entity.UserAddress-3330329 [detached] is not a known Entity type.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.detach(EntityManagerImpl.java:2696) ~[shared/:na]
	at com.haulmont.cuba.core.sys.EntityManagerImpl.detach(EntityManagerImpl.java:344) ~[classes/:na]
	at jdk.internal.reflect.GeneratedMethodAccessor213.invoke(Unknown Source) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.haulmont.cuba.core.sys.PersistenceImpl$EntityManagerInvocationHandler.invoke(PersistenceImpl.java:424) ~[classes/:na]
	at com.sun.proxy.$Proxy220.detach(Unknown Source) ~[na:na]
	at com.haulmont.cuba.core.app.RdbmsStore.lambda$detachEntity$6(RdbmsStore.java:1125) ~[classes/:na]
	at com.haulmont.cuba.core.global.MetadataTools.internalTraverseAttributesByView(MetadataTools.java:1247) ~[classes/:na]
	at com.haulmont.cuba.core.global.MetadataTools.traverseAttributesByView(MetadataTools.java:989) ~[classes/:na]
	at com.haulmont.cuba.core.app.RdbmsStore.detachEntity(RdbmsStore.java:1114) ~[classes/:na]
	at com.haulmont.cuba.core.app.RdbmsStore.commit(RdbmsStore.java:555) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[shared/:na]
	at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[shared/:na]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[shared/:na]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[shared/:na]
	at com.sun.proxy.$Proxy221.commit(Unknown Source) ~[na:na]
	at com.haulmont.cuba.core.app.DataManagerBean.commit(DataManagerBean.java:188) ~[classes/:na]
	at com.haulmont.cuba.core.app.DataManagerBean$Secure.commit(DataManagerBean.java:416) ~[classes/:na]
	at com.haulmont.cuba.core.sys.TransactionalDataManagerBean.save(TransactionalDataManagerBean.java:117) ~[classes/:na]
	at com.company.doprava.service.HelperServiceBean.createOrEditDoprava(HelperServiceBean.java:848) ~[classes/:na]
	at com.company.doprava.service.HelperServiceBean.updateDoprava(HelperServiceBean.java:919) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[shared/:na]
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[shared/:na]
	at com.haulmont.cuba.core.sys.TransactionalInterceptor.aroundInvoke(TransactionalInterceptor.java:58) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[shared/:na]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[shared/:na]
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[shared/:na]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) ~[shared/:na]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[shared/:na]
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[shared/:na]
	at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:90) ~[classes/:na]
	at jdk.internal.reflect.GeneratedMethodAccessor166.invoke(Unknown Source) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[shared/:na]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[shared/:na]
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[shared/:na]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[shared/:na]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[shared/:na]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[shared/:na]
	at com.sun.proxy.$Proxy180.updateDoprava(Unknown Source) ~[na:na]
	at com.company.doprava.core.HelperBean.lambda$synchronizeRecordsIn$2(HelperBean.java:118) ~[classes/:na]
	at java.base/java.util.Vector.forEach(Vector.java:1388) ~[na:na]
	at com.company.doprava.core.HelperBean.synchronizeRecordsIn(HelperBean.java:114) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.haulmont.cuba.core.app.scheduling.RunnerBean.executeTask(RunnerBean.java:241) ~[classes/:na]
	at com.haulmont.cuba.core.app.scheduling.RunnerBean.lambda$runTask$0(RunnerBean.java:141) ~[classes/:na]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na"

UserAddress is BaseIntegerIdIdentity from secondary datasource.

Problem is only occouring in version higher than 7.2.7

Can’t find a solution in google and here as well. Can anybody help?Because I’ve started looking for anything that can interrupt record saving…I’ve checked everything that has access to data or processes like worktime (employee monitoring software)

Hi, Igor!
I’ve tried to reproduce this exception but have not succeeded with data manager only: I’ve used

  • secondary datasource entity that extends BaseIntegerIdEntity
  • with or without related entity from main datasource
  • saving changes by transactionalDataManager.secure().save()
  • on versions: 7.2.13, 7.2.8, 7.2.7.

The only way I’ve found to get this exception is to merge entity into wrong transaction before saving. E.g. merge secondary store entity using EntityManager for main datastore, that is not correct:

When you control transactions in your code and work with entities via EntityManager, you have to specify explicitly what data store to use. See the Persistence interface methods and @Transactional annotation parameters for details

If this problem occurs under another circumstances, some example project where it reproduced is needed for further investigation.

Regards,
Dmitry