У меня есть такой верблюжий маршрут:
this.from(uri).process(e -> {
String json = e.getIn().getBody(String.class);
JsonObject message = gson.fromJson(json, JsonObject.class);
Status status = gson.fromJson(message.get("data"), Status.class);
e.getIn().setHeader("JSON_OBJECT", message);
e.getIn().setBody(status);
}).to(jpaStatusUri).process(e -> {
JsonObject message = (JsonObject) e.getIn().getHeader("JSON_OBJECT");
StatusDetails details = gson.fromJson(message.get("data"), StatusDetails.class);
// If the first route was successfull i can get the id of the inserted entity here (this works)
details.setStatusId(e.getIn().getBody(Status.class).getId());
e.getIn().setBody(details);
}).to(jpaDetailsUri);
Я отправляю объект Status
в конечную точку jpa jpaStatusUri
.Объект вставляется, и в следующем методе process()
я создаю соответствующий объект StatusDetails
, присваиваем ему statusId идентификатор ранее сохраненного Status
и отправляем его в конечную точку jpaDetailsUri
.
Это работает должным образом, если объект Status
был успешно сохранен.В случае ConstraintViolationException
, т. Е. Уникальный ключ для сущности Status
уже существует, это вызовет исключение, у меня не будет правильного statusId
, и я больше не смогу обновлять соответствующую сущность StatusDetails
.
Конечно, я мог бы справиться с этим в методе process (), но каков был бы "верблюжий путь", чтобы справиться с этим?