我收到的是org.hibernate.HibernateException:当我尝试使用多个并行线程更新数据库时,级联期间刷新是危险的。我的情况是这样的:我想将数据从一个表复制到另一个表并并行使用线程,以便每个线程将一行复制到另一个表并更新一个标志以指示它被复制。
这是我的代码:
private ExecutorService executor = Executors.newFixedThreadPool(50);
public void startThreads() {
for (int i = 0; i < 5; i++) {
executor.submit(new Spinach(i));
}
}
而且,在Spinach类调用方法中,我有这个代码:
Transaction t1=sessionFirstDb.beginTransaction();
Transaction t2 = sessionSecondDb.beginTransaction();
//setting the POJO values
sessionSecondDb.save(user);
t2.commit();
a.setIsCopyDone("yes");
sessionFirstDb.saveOrUpdate(a);
t1.commit();
而且,例外是
org.hibernate.HibernateException: Flush during cascade is dangerous
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1023)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
而且,我经历了这个链接: HibernateException: Flush during cascade is dangerous但建议的解决方案是使用单个线程。