У меня есть объект DEVICE, который связан с объектом PROPERTIES, как определено ниже,
@OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, orphanRemoval = true)
private Properties properties;
, где объект PROPERTIES имеет следующий идентификатор,
@Id
@Column(name=ID)
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
У меня два потокапараллельный,
Thread-1 -> Для DEVICE-1 он попытается получить объект PROPERTIES.Это было как нуль (свойство не определено).Следовательно, он создаст новый PROPERTIES-1 и добавит в сущность DEVICE-1.
Thread-2 -> Пытается удалить DEVICE-1.Во время удаления выдается ниже исключения.
javax.persistence.EntityNotFoundException: Unable to find com.entity.properties with id 3
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:181)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:262)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:176)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
at org.hibernate.engine.internal.StatefulPersistenceContext.unproxyAndReassociate(StatefulPersistenceContext.java:603)
at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:89)
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:929)
at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:906)
at org.hibernate.engine.spi.CascadingActions$1.cascade(CascadingActions.java:74)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
at org.hibernate.event.internal.DefaultDeleteEventListener.cascadeAfterDelete(DefaultDeleteEventListener.java:376)
at org.hibernate.event.internal.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:312)
at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:160)
at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:920)
at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:896)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:1214)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_131]
at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_131]
at org.apache.aries.jpa.support.osgi.impl.EmProxy.invoke(EmProxy.java:43)
at com.sun.proxy.$Proxy130.remove(Unknown Source)
at Proxyc164ca4b_578b_459f_ace4_b5791bab5274.remove(Unknown Source)
Эта проблема наблюдается, когда эти два потока выполняются одновременно с некоторой разницей в миллисекунды.Пожалуйста, помогите мне понять возможность / причину этой ошибки.