我正在使用下面的代码片段从服务层加载一个实体进行编辑。
public class VendorServiceImpl{
@Transactional(readOnly=true)
Vendor findVendor(...){
return vendorRepository.findVendorBy(...);
}
}
@Controller
VendorController{
@AutoWired
VendorService vendorService;
@GetMapping("/edit/{id}")
public String editVendor(@PathVariable("id")Long id){
Vendor v = vendorService.findVendorBy(id);
/*
After loading the entity from db I want to make a few changes
e.g
v.setCountry("xyz");
This change is automatically sent to the database which I don't want.
/*
}
}
如何防止此问题。我想在用户提交表单后提交更改。
我使用的是spring 4.3.7和hibernate 5.0.12
答案 0 :(得分:0)
set country是否进行数据库调用,如果是,那么理想情况下,DB调用不应该来自实体,而是来自服务层,因为从实体层进行处理会有问题。但是,如果您无法更改此设置,我建议您在控制器周围创建一个事务。这应该确保一旦控制器中的事务完成,那么就会提交值。
此外,作为练习,请确保将连接的自动更新属性设置为false。