object references an unsaved transient instance - save the transient instance before flushing : com.

程序执行到下面 的“保存客户退货单商品”时报错了

/*保存客户退货单   以及该客户退货单对应的客户退货单商品
	 * (non-Javadoc)
	 * 
	 */
	@Override
	public void save(CustomerReturnList customerReturnList, List<CustomerReturnListGoods> customerReturnListGoodsList) {
		for(CustomerReturnListGoods customerReturnListGoods : customerReturnListGoodsList) {
			customerReturnListGoods.setType(goodsTypeRepository.getOne(customerReturnListGoods.getTypeId()));//设置商品类别
			customerReturnListGoods.setCustomerReturnList(customerReturnList); //设置客户退货单
			customerReturnListGoodsRepository.save(customerReturnListGoods);//保存客户退货单商品
			
			// 退货后 修改商品库存  修改商品的状态(发生单据)
			Goods goods = goodsRepository.findOne(customerReturnListGoods.getGoodsId());
			goods.setInventoryQuantity(goods.getInventoryQuantity()+customerReturnListGoods.getNum());
			goods.setState(2);
			goodsRepository.save(goods);
		}
		customerReturnListRepository.save(customerReturnList);//保存客户退货单
		
	}

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.java1234.entity.CustomerReturnListGoods.customerReturnList -> com.java1234.entity.CustomerReturnList

由于在向数据库保存对象的时候,该对象还有一个外键,外键其实是另一个实体,这个实体缺少主键或主键为空的话就会报这个错!

解决方法:配置cascade关键字,级联操作
JPA 中定义了四种 CASCADE 类型:

* PERSIST:持久保存拥有方实体时,也会持久保存该实体的所有相关数据。
* MERGE:将分离的实体重新合并到活动的持久性上下文时,也会合并该实体的所有相关数据。
* REMOVE:删除一个实体时,也会删除该实体的所有相关数据。
* ALL:以上都适用。

具体使用见下图:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值