Рассмотрите арку контроллера-службы-репозитория.Сущность становится отсоединенной, когда должно управляться.
Успешный метод в TokenService, заявляющий, что я верен к делу.
@Transactional
public Token getByString(String tokenString) {
Token t = tr.loadTokenByString(tokenString);
t.setTokenType("SERVICE MODIF"); // note this test line works and changes are propagated to db
em.flush();
return t;
}
Теперь мы внутри сопоставление обработчика контроллера призывающего предыдущего метода обслуживания и извлечение маркеров:
logger.info(urlToken);
Object obj;
Token token;
obj = tokenService.getByString(urlToken);
User u;
if (obj != null) {
token = (Token) obj;
// tokenService.save(token); - am angry lost detached entity throwing exception that i am detached
token.setTokenType("helllo"); // this does not propagate to db since entity is detached
logger.info(token.toString());
u = token.getUser();
userService.activateUser(u);
}
Как вы можете видеть из комментариев следующего setTokenType
внутри вызова контроллера ничего не делает, таким образом, я назвал save
, чтобы проверить состояние, которое без дальнейших угадываний уведомило меня о том, что сущность отделилась.
Означает ли это, что я должен делать все изменения внутри классов обслуживания? Что не так в контексте контроллера, если мне просто нужно вызвать один мутатор, я не хочу, чтобы меня заставляли создавать целую цепочку репозитория-службы, чтобы сделать его с контроллера O.o.
Я помню где-то глубоко в своем мозгу, что для какого-то магического фильтра есть требование для учета контекста контроллера, но это было давно, и я не могу вспомнить, какой фильтр требуется. Может быть, я совершенно неправ.
Я сомневаюсь, что смог бы merge
внутри контроллера, так как asfaik даже .flush
выбрасывает исключение, когда я забываю объявить услугу транзакционной. И я сомневаюсь, что это возможно или даже правильно, чтобы объявить метод обработчика обработчика транзакций и контекст постоянства autwire непосредственно для вызова merge.
Идеальный сценарий, конечно, состоял в том, чтобы поддерживать постоянное состояние объекта, даже когда оно получает доступ к цепному вызову контроллера.
hm, то в чем смысл «нового» ключевого слова в именованных запросах, если объекты можно отделить автоматически, передав их контроллерам? Что вы говорите, подразумевает, что всякий раз, когда я передаю объекты контроллеру, их можно безопасно модифицировать (чтобы соответствовать требованиям к просмотру) и отображаться для пользователя? – Aubergine