【发布时间】:2019-04-04 00:38:24
【问题描述】:
我有一种情况,我想检索数据,但在返回之前我想在不保存/持久化的情况下更改它。
这是我的休息控制器:
@RestController
@RequestMapping("api/drawing-releases")
@CrossOrigin("*")
public class DrawingReleaseRestController {
@Autowired
private DrawingReleaseService service;
@RequestMapping(method = RequestMethod.GET, value = "/{id}")
@JsonView(View.DrawingReleaseView.class)
public ResponseEntity<DrawingRelease> getWithId(@PathVariable int id) throws EntityNotFoundException {
return new ResponseEntity<>(service.getByID(id),HttpStatus.OK);
}
}
这里是服务实现:
@Service
public class DrawingReleaseServiceImpl extends DrawingFunctions implements DrawingReleaseService {
/**
* Logging Manager
*/
private static final Logger LOGGER=LogManager.getLogger();
@Autowired
private DrawingReleaseRepository repository;
@Override
public DrawingRelease getByID(int id) throws EntityNotFoundException {
Optional<DrawingRelease> opt = repository.findById(id);
...
// manipulate the data here
...
return opt.get();
}
}
最初我在服务上有@Transactional 注释。通过删除它而不在 getByID 方法上使用它,我首先认为会话将与存储库一起打开和关闭,如答案 here 所示。
那不起作用,我在 cmets 中看到“会话持续整个 HTTP 请求处理期间”。所以,在我添加的服务中
@Autowired
private EntityManager em;
然后在我添加的getByID方法中
em.close();
在我进行任何更改之前。但是,我所做的任何更改仍在保留中。
有什么方法可以在我的服务层中进行未保存的更改?我想我可以创建一些 POJO 来镜像实体(但不是实体),然后复制数据并返回这些对象,但似乎我不应该做这样的事情。
【问题讨论】:
标签: java hibernate jpa spring-data-jpa persistence