hibernate 循环插入数据只插入一条的问题

本文讨论了在使用Hibernate框架时,如何通过正确管理Session和事务来避免循环插入数据只插入一条的问题。重点介绍了查询操作后如何安全地执行保存操作,防止缓存干扰数据一致性。

如果保存数据模块只用到了同一个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和新插入的不是同一个,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值