java中两个关联数据表,如何找出关联数据(关联数据的字段值一样的情况)

java中两个关联数据表,如何根据关联字段判断其中是否存有关联数据

1.写在前面

这几天项目有个问题,就是在车辆列表中删除车辆时,如果这个车辆被驾驶员列表里的驾驶员绑定了,就不能删除这个车辆,一开始不知道咋弄,还想着在车辆列表弄个status字段,每次驾驶员绑定车辆时就给该车辆的状态设为1,解除绑定就设为0,但后来发现有个大问题,就是如果一个车绑定两个司机,其中一个司机解绑了,但另一个没有,这就存在问题了。

2.解决办法

一开始我用的方法是,先判断车辆表DTO里的id和驾驶员表里的vehicle_id有没有一样的,有就不执行删除,直接粗暴的阻止一切删除。

@SysLog("删除车辆")
	@DeleteMapping("/{id}")
	@Transactional
	public R removeById(@PathVariable Integer id, @RequestBody CdDriverInfo driverInfo) {
		CdVehicleInfo cdVehicleInfo = vehicleInfoService.getOne(new QueryWrapper<CdVehicleInfo>().eq("id", driverInfo.getVehicleId()));
		if (cdVehicleInfo == null){
			vehicleInfoService.removeById(id);
			fileInfoService.remove(Wrappers.<CommonFileInfo>lambdaQuery().eq(CommonFileInfo::getRefId, id));
		}
		return R.ok();
	}

其实这个写的有很大问题,结果应该是找不到

3.请教大佬

@SysLog("删除车辆(批量)")
	@DeleteMapping("/batch")
	@Transactional
	public R removeByIds(@RequestBody List<Integer> ids,CdDriverInfo driverInfo) {
		//Integer型数组ids遍历赋值给id
		for (Integer id : ids) {
			//查询单个车辆id是否被驾驶员绑定,可能查出多个数据故用list接受返回数据
			List<CdDriverInfo> cdDriverInfos = driverInfoService.list(new QueryWrapper<CdDriverInfo>().eq("vehicle_id", id));
			//判断list是否为空
			if (cdDriverInfos!=null&&!cdDriverInfos.isEmpty()){
				//list不为空代表车辆被绑定,无法删除
				//从ids中刪除本id
				ids.remove(id);
				return R.failed("数据已关联不能删除");
			}
		}
		vehicleInfoService.removeByIds(ids);
		fileInfoService.remove(Wrappers.<CommonFileInfo>lambdaQuery().in(CommonFileInfo::getRefId, ids));
		return R.ok();


	}

}

请教大佬之后,大佬给出的方法就是遍历传入所有车辆id数据,一个个筛选是否和驾驶员中vehicle_id是否一样,所有的一样的用list集合存放,然后从要删除的ids中去掉这个list,再执行删除。

核心筛选代码(可做模板套用)

/*
该代码作者:大明哥
*/
for (Integer id : ids) {
   //查询单个车辆id是否被驾驶员绑定,可能查出多个数据故用list接受返回数据
   List<CdDriverInfo> cdDriverInfos = driverInfoService.list(new QueryWrapper<CdDriverInfo>().eq("vehicle_id", id));
   //判断list是否为空
   if (cdDriverInfos!=null&&!cdDriverInfos.isEmpty()){
      //list不为空代表车辆被绑定,无法删除
      //从ids中刪除本id
      ids.remove(id);
   }
}
/*
该代码作者:大明哥
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值