如果保存数据模块只用到了同一个session,完了直接返回,那么只要开启了事务便不会出现(循环插入数据只插入一条的问题)的问题,
而当代码是同一个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和新插入的不是同一个,
本文讨论了在使用Hibernate框架时,如何通过正确管理Session和事务来避免循环插入数据只插入一条的问题。重点介绍了查询操作后如何安全地执行保存操作,防止缓存干扰数据一致性。
1046

被折叠的 条评论
为什么被折叠?



