У меня есть ситуация, когда я хочу получить данные, но прежде чем они будут возвращены, я хочу изменить их без сохранения / сохранения.
Вот мой контроллер покоя:
@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
, я сначала подумал, что сессия будет открываться и закрываться с хранилищем, как указано ответом здесь .
Это не сработало, и я заметил в комментариях, что «сеанс длится всю продолжительность обработки HTTP-запроса». Итак, в сервисе я добавил
@Autowired
private EntityManager em;
и затем в методе getByID
я добавил
em.close();
прежде чем я внес какие-либо изменения. Тем не менее, все сделанные мной изменения все еще сохраняются.
Можно ли каким-либо образом вносить несохраненные изменения в свой уровень обслуживания? Я полагаю, я мог бы создать несколько POJO, которые отражают сущности (но не являются сущностями), а затем скопировать данные и вернуть эти объекты, но не похоже, что мне нужно что-то подобное делать.