동안 데이터베이스의 변경 사항을 얻을 수 없습니다 : 대화의 시작 부분이라고합니다)SEAM/최대 절전 모드 : 나는 클래스 가지고 대화
@Name("foo")
@Scope(ScopeType.CONVERSATION)
public class Foo {
@In
Session session;
@In
private Conversation conversation;
@RequestParameter
Long barId;
/* outjected fields */
@Out
Bar bar;
/* some attributes and methods */
public void start() {
/* some initializations */
this.bar = (Bar) session.get(Bar.class, barId);
}
public void end() {
/* some actions involving bar and bar.getBaz() */
conversation.end();
}
}
방법의 시작 (및 속성 표시 줄을 초기화 (바 어떤 엔티티 클래스입니다.) 그런 다음 bar는 엔티티 인 baz 속성을 갖습니다.
대화 중에 다른 사용자가 Google 바와 관련된 baz 개체를 수정하는 경우가 발생할 수 있습니다. 그런 다음 end()가 호출되면 bar.getBaz()는 이전 (변경되지 않음) 버전의 baz를 반환하고 은 데이터베이스에을 덮어 씁니다.
session.flush(), session.merge (bar), session.merge (bar.getBaz())를 사용하여 end() 메서드에서 baz의 수정 된 상태를 가져 오려고했지만 아무 것도 작동하지 않습니다. 데이터베이스에서 오염을 피하려면 어떻게해야합니까?
고마워요! session.refresh (bar.getBaz())가 작동했습니다! 응용 프로그램이 이미 프로덕션 상태이고 데이터베이스 스키마를 변경할 수 없으므로 @Version을 사용할 수 없습니다. – janek37