防止Spring在控制器中进行实体更改

时间:2017-03-14 05:37:38

标签: java spring hibernate spring-mvc spring-data-jpa

我正在使用下面的代码片段从服务层加载一个实体进行编辑。

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

1 个答案:

答案 0 :(得分:0)

set country是否进​​行数据库调用,如果是,那么理想情况下,DB调用不应该来自实体,而是来自服务层,因为从实体层进行处理会有问题。但是,如果您无法更改此设置,我建议您在控制器周围创建一个事务。这应该确保一旦控制器中的事务完成,那么就会提交值。

此外,作为练习,请确保将连接的自动更新属性设置为false。