DeviceRepair是一个类,Device是DeviceRepair的属性,修改DeviceRepair.Device的时候报错:identifier of an instance of was altered from xxx to xxx
@Transactional
fun updateRepair(
deviceRepair: DeviceRepair,
request: DeviceRepairUpdateRequest
):DeviceRepair{
val existDeviceId = deviceRepair.device?.id
val newDeviceId = request.deviceId ?: throw BadRequestException("deviceId不能为空")
if (existDeviceId != newDeviceId){
val result = this.deviceMapper.searchRepair(deviceIdIn = setOf(newDeviceId))
if(result?.size != 0) {
throw BadRequestException("该设备已报修")
}
else{
deviceRepair.device?.id = newDeviceId
}
}
deviceRepair.device = newDeviceId?.let{ this.find(it) }
return this.repairRepository.save(deviceRepair)
}
此处报错原因是因为else语句中,给DeviceRepair的Device赋值了新的id,Hibernate会报错。
解决办法:
删除else中的操作
直接将新的Device放入DeviceRepair中就可以
@Transactional
fun updateRepair(
deviceRepair: DeviceRepair,
request: DeviceRepairUpdateRequest
):DeviceRepair{
val existDeviceId = deviceRepair.device?.id
val newDeviceId = request.deviceId ?: throw BadRequestException("deviceId不能为空")
if (existDeviceId != newDeviceId){
val result = this.deviceMapper.searchRepair(deviceIdIn = setOf(newDeviceId))
if(result?.size != 0) {
throw BadRequestException("该设备已报修")
}
}
deviceRepair.device = newDeviceId?.let{ this.find(it) }
return this.repairRepository.save(deviceRepair)
}
}