컨트롤러 서비스 저장소 아치를 고려하십시오.관리해야하는 경우 엔티티가 분리됩니다.
TokenService에서 성공적으로 수행 한 성공적인 방법입니다. 당신이 컨트롤러 호출 내부의 다음 setTokenType
따라서 나는라고 아무것도하지 않는 코멘트에서 볼 수 있듯이
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);
}
:
@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;
}
이제 우리는 내부 컨트롤러 핸들러 맵핑 이전 서비스 메소드를 호출하고 토큰을 추출입니다 save
더 이상 추측하지 않고 나에게 개체가 분리되었음을 알리는 상태를 확인합니다.
서비스 클래스 내에서 모든 변경을 수행해야한다는 것을 의미합니까? 컨트롤러 컨텍스트가 잘못된 이유는 하나의 뮤 테이타를 호출 할 필요가 있다면 컨트롤러 O.o에서 전체 저장소 - 체인을 만들어 강제로 만들고 싶지는 않을 것입니다.
나는 컨트롤러 컨텍스트를 설명하기 위해 몇 가지 마법 필터가 필요하다는 것을 기억하고있다. 그러나 그것은 오래 전이었고 어떤 종류의 필터가 필요한지를 기억할 수 없다. 어쩌면 나는 완전히 틀리다.
이 난 .flush
내가 서비스 트랜잭션을 선언하는 것을 잊지 때마다 예외가 발생 asfaik 때문에 컨트롤러 내부 merge
에 나는 것 수 의심한다. 그리고 컨트롤러 처리기 메소드를 트랜잭션으로 선언하고 지속성 컨텍스트를 autowire로 선언하여 병합을 호출하는 것이 가능하거나 정확할 수도 있습니다.
물론 이상적인 시나리오는 컨트롤러 체인 호출에 의해 검색되는 경우에도 엔터티의 영구 상태를 유지하는 것입니다.
hm, 엔티티가 컨트롤러에 전달되어 자동으로 분리 될 수 있다면 명명 된 쿼리에서 "새"키워드의 요점은 무엇입니까? 당신이 말한 것은 엔티티를 컨트롤러에 전달할 때마다보기 요구 사항을 충족하기 위해 안전하게 수정할 수 있고 사용자에게 표시된다는 것을 의미합니까? – Aubergine