而当代码是同一个session执行了一个查询操作,然后继续执行保存操作,如下:
@Override public List<Loan> fetchRaisingLoan(String loanId) { String hql = "from Loan loan where loan.status = '" + "raising' "; if(!loanId.equals("all")){ hql = hql.concat(" and loan.id = '" + loanId + "'"); } Session session = ht.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); List<Loan> list = session.createQuery(hql).list(); tx.commit(); return list; } //在controller层执行完以上查询后循环执行以下插入操作 public void saveP2pToTable(CsaiP2pDataPojo csaiP2pDataPojo) { Session session = ht.getSessionFactory().getCurrentSession(); Transaction tx = null; try { tx = session.beginTransaction(); session.saveOrUpdate(csaiP2pDataPojo); } catch (Exception e) { e.printStackTrace(); tx.rollback(); }finally{ tx.commit(); session.close(); } //session.setFlushMode(FlushMode.AUTO); } //之后会出现只插入一条数据的问题 //解决办法:将保存方法中的获取session的方法改为“openSession”即可 //原因:因为二级缓存中保存了第一次的pojo导致,当opensession时重新打开一个session, //这样,hibernate会认为这缓存中的pojo和新插入的不是同一个,