Java 已具有关联的托管连接(使用parallelStream().foreach())

Java 已具有关联的托管连接(使用parallelStream().foreach()),java,multithreading,Java,Multithreading,javax.persistence.PersistenceException:org.hibernate.TransactionException:已具有关联的托管连接 原因:org.hibernate.TransactionException:已具有关联的托管连接 我使用的是parallelStream()。foreach()适用于多线程概念: private void loadHcpDataIntoCassandra(ResultSet srchpdata)抛出SQLException{ L

javax.persistence.PersistenceException:org.hibernate.TransactionException:已具有关联的托管连接 原因:org.hibernate.TransactionException:已具有关联的托管连接

我使用的是parallelStream()。foreach()适用于多线程概念:

private void loadHcpDataIntoCassandra(ResultSet srchpdata)抛出SQLException{
List hcpDataList=结果列表(srcHcpData);
Cluster Cluster=HcpDao.getCassandraConnection();
List tblSpecs=HcpDao.getTableSpecs();
会话=cluster.connect(tblSpecs.get(0));
//调用prepareHcpAndLoad()方法:-
forEach(hcpMap->prepareHcpAndLoad(hcpMap,session));
cluster.close();
}
我得到了上面提到的异常,我将parallelStream()替换为

for(映射hcpMap:hcpDataList){
准备CPAndLoad(hcpMap,会话);
}
增强for循环对我来说非常有效。但我需要多线程的概念。即使我使用parallelStream().foreach()如何解决这个问题

private static void prepareHcpAndLoad(映射hcpMap,会话){
字符串hcpHceId=“”;
对于(Map.Entry:hcpMap.entrySet()){
字符串colName=entry.getKey();
对象hcpTableRow=entry.getValue();
hcpMasterData.setHcpHceId(hcpTableRow.toString());
hcpHceId=hcpTableRow.toString();
}
/**获取MDM_id*/
MdmId mdm=新的MdmId();
mdm.setHcpHceId(hcpHceId);
字符串mdmId=getMdmId(mdm);
/**更新mdmId*/
hcpMasterData.setMdmId(mdmId);
mapper.save(hcpMasterData);
}
//@持久上下文
@PersistenceContext(类型=PersistenceContextType.TRANSACTION)
私有静态EntityManager em=getEntityManager();
公共静态字符串getMdmId(MdmId mdm){
if(em==null){
em=getEntityManager();
}
字符串mdmId=“”;
EntityTransaction tr=em.getTransaction();
试一试{
tr.begin();//错误行
em.persist(mdm);
em.flush();
mdmId=Long.toString(mdm.getId());
tr.commit();
}捕获(异常错误){
logger.error(error.getMessage());
错误。printStackTrace();
}
返回mdmId;
}
私有静态EntityManager getEntityManager(){
返回Persistence.createEntityManagerFactory(“sql连接”).createEntityManager();
}

因为线程是并行执行的,所以语句em=getEntityManager();应替换为em=Persistence.createEntityManagerFactory(“sql连接”).createEntityManager()@Voodoo即使我更改了代码,我仍然会遇到同样的错误,因为线程是并行执行的,语句em=getEntityManager();应替换为em=Persistence.createEntityManagerFactory(“sql连接”).createEntityManager()@伏都教我还是犯了同样的错误,即使我改变了密码