설명 웹 애플리케이션에서 Hibernate 객체 (db 테이블에 매핑 됨)의 일반적인 수명주기를 설명하십시오. 개체의 새 인스턴스를 만들고 db에 유지한다고 가정합니다. 그러나 응용 프로그램 수명 동안 분리 된 개체에서 작업 할 것이며 결국 데이터베이스를 종료 할 때 업데이트해야합니다. 최대 절전 모드와 스프링 모드는 어떻게 생겼습니까?웹 응용 프로그램에서 Hibernate 객체의 전형적인 수명주기 -?
p.s. 서블릿 전환 사이에 트랜잭션과 세션을 사용할 수 있습니까? 그래서 우리는 하나의 세션을 열고 그것을 다시 열 필요없이 모든 서블릿에서 사용 했습니까?
설명이있는 예제를 제공하려고합니다. 앱이 시작되면 로그 레코드가 생성된다고 가정합니다. 이 작업은 한번에 할 수 있습니다. Log log = new Log (...) save (log) - log는 테이블 LOG에 해당합니다.
응용 프로그램에서 사용자 입력을 처리하고 계속 진행하면서 새로운 데이터가 누적됩니다.
두 번째 단계 이후에 우리는 예를 들어, 로그 개체 컬렉션을 뭔가를 추가 할 수 있습니다 이// 이제 우리가 선택한 어떤 사용자의 추적이 : 설정 thisUserChoice을 는 // 그래서 우리는을 업데이트 할 수 있습니다 영구 객체, 우리는 지금 새로운 데이터를 가지고 있습니다! // log.userChoices = thisUserChoice.
내 질문의 성격이 여기에 있습니다. 사용자가 새로운 데이터를 얻을 때마다 데이터베이스를 업데이트하려면 어떻게 처리해야합니까?
관계형 모델에서는 행 ID로 작업 할 수 있으므로이 레코드를 가져와 행의 다른 데이터를 업데이트 할 수 있습니다.
Hibernate에서 우리는 id에 의해 객체를로드 할 수있다.
하지만 IT가 나아갈 길은 무엇입니까? 어떤 것이 든 더 좋습니까?
@ 존 새 개체를 유지하면 데이터베이스에 저장되므로 동시성은이 ID를 가진 한 행만 존재할 수 있으므로 의미가 없습니다. 두 개의 스레드가 서로 다른 세션에서 실행되는 경우에도 동일한 인스턴스를 db에 유지할 수 없습니다. 그리고 모든 다음 스레드는 새로운 세션을 엽니 다. 여기서 잘못된 것이 있으면 저를 바로 잡으십시오. – EugeneP
정확합니다. 일반적으로, 당신은 최대 절전 모드에서 id 할당을 허용합니다. 두 개의 쓰레드는 새로운 객체를 지속시킬 수 있고, 하이버 네이트는 다른 객체를 얻을 수있다. 10.2 절의 "persist()"는 일시적인 인스턴스를 영속적으로 만들지 만 식별자 값이 영속 인스턴스에 즉시 할당되는 것을 보장하지는 않으며, 할당은 플러쉬 타임에 발생할 수도 있습니다. 트랜잭션 경계 밖에서 호출 된 경우 INSERT 문을 실행하십시오. 이것은 확장 된 세션/지속성 컨텍스트가있는 장기 실행 대화에 유용합니다. " – John