[英]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.