使用TaskExecutor时数据插入问题

时间:2015-08-13 06:32:28

标签: java hibernate spring-mvc jpa spring-data-jpa

在我的Web服务应用程序中,我实现异步任务执行器以在数据库中插入对象。但是在第一次插入时,它会抛出异常。

 org.springframework.orm.hibernate3.HibernateSystemException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:

第二次刷新url时,对象成功插入数据库。

问题在于未插入对象的新请求的第一个实例。

XML文件

<bean id="applicationEventMulticaster" class="org.springframework.context.event.SimpleApplicationEventMulticaster"> 
   <property name="taskExecutor"> 
      <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"></bean>
     </property> 
  </bean>

我使用org.springframework.core.task.SimpleAsyncTaskExecutor / org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor,子表列表为clear()addall()。但没有运气。

如果我评论任务执行程序标记,则会正确插入所有新请求对象。 在我的场景中,我必须实现异步任务执行器。

RptServiceImp.java

public class RptServiceImp{

@javax.annotation.Resource
private ApplicationEventPublisher applicationEventPublisher;

@Transactional
 public void process(final RqstLoad rqstLoad ) {

 try {
    applicationEventPublisher.publishEvent(new LoggingEvt (this));

  }catch(Exception e){
      System.out.println("e:: "+e);
      e.printStackTrace();
    }
 }

EventListoner.java

@Component
public class EventListener implements ApplicationListener<LoggingEvt > {
@Autowired
private EvntRptDAO evntRptDAO ;

 @Override
 public void onApplicationEvent(LoggingEvt evnt) {
  final CustResource custRsrc = event.getCustResource();

   try {
      evntRpt er = new evntRpt (custRsrc);
      evntRptDAO.saveAndFlush(er);
    }
   catch(Exception e){
      System.out.println("e:: "+e);
      e.printStackTrace();
    }

   }
}

0 个答案:

没有答案