簡體   English   中英

保存對象時出錯:沒有休眠會話綁定

[英]Error in saving an object: No Hibernate Session bound

錯誤:沒有Hibernate Session綁定到線程,並且配置不允許在此處創建非事務性會話


我正在調用將對列表進行迭代的線程,並通過查找程序和通道將其映射到事件對象。 但是我不明白我犯錯的地方了嗎? 我在循環100-500中創建線程


ExecutorService executor = Executors.newFixedThreadPool(10);//creating a pool of 5 threads
Runnable SaveSchedule = new SaveScheduleListThread(scheduleList.clone());
executor.execute(SaveSchedule);

以下是實現Runnable接口的線程類

class SaveScheduleListThread implements Runnable
{
    private List<ChannelSchedule> scheduleList;

    public SaveScheduleListThread(List<ChannelSchedule> scheduleList)
    {
//      this.scheduleList = new ArrayList<ChannelSchedule>();
        this.scheduleList=scheduleList;
    }


    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run()
    {
        // TODO Auto-generated method stub

        log.info "Thread:" +Thread.currentThread().getName() +" Started Time:"+System.currentTimeMillis();
        processScheduleList();
        log.info "Thread:" +Thread.currentThread().getName() +" Ended Time:"+System.currentTimeMillis();

    }

    private void processScheduleList()
    {
        try
        {
            Iterator<ChannelSchedule> scheduleListIterator = scheduleList.iterator();

            ScheduleProgram programDetails = new ScheduleProgram();
            IpgChannel channelDetails = new IpgChannel();
            ChannelSchedule event = new ChannelSchedule(); 

            while(scheduleListIterator.hasNext())
            {
                event = scheduleListIterator.next();

                programDetails = ScheduleProgram.findByTmsId(event.getEventTMSId());
                channelDetails = IpgChannel.findByPrgSvcId(event.getEventPrgSvcId());

                event.setProgram(programDetails);
                event.setChannel(channelDetails);

                event.save();
            }
        }
        catch(Exception e)
        {
            session.open()
            log.error "Exception while Processing ScheduleList in Thread"
            log.error e.getStackTrace();
            log.error e.getMessage();

        }
    }

}

processScheduleList()放入事務中:

Event.withTransaction{
  processScheduleList()
}

更新:

每500條記錄刷新一次會話:

int counter = 0
while(scheduleListIterator.hasNext())
        {
            counter++
            event = scheduleListIterator.next()
            // do stuff
            event.save flush:counter % 500
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM