source

휴지 상태에서의 분리, 지속성 및 과도 물체는 무엇입니까?

factcode 2022. 9. 20. 23:53
반응형

휴지 상태에서의 분리, 지속성 및 과도 물체는 무엇입니까?

휴지 상태에서의 분리, 지속성 및 과도 물체는 무엇입니까?예를 들어서 설명해 주세요.

A new관련되지 않은 영속 클래스의 인스턴스Session는 데이터베이스에 표시되지 않으며, 휴지 상태에서는 식별자 값이 과도하다고 간주되지 않습니다.

Person person = new Person();
person.setName("Foobar");
// person is in a transient state

영속 인스턴스는 데이터베이스 내에 표현, 식별자 값을 가지며 이 인스턴스와 관련지어집니다.Session일시적인 인스턴스를 영속적으로 하려면 , 이 인스턴스를 nonfirst에 관련지을 수 있습니다.Session:

Long id = (Long) session.save(person);
// person is now in a persistent state

자, 만약 우리가close겨울잠Session영속 인스턴스는 독립 인스턴스가 됩니다.이 인스턴스는, 에 접속되어 있지 않습니다.Session(단, 변경 후 새로운 것에 재접속할 수 있습니다.Session(나중에)

이 모든 것은 10장 전체에 명확하게 설명되어 있다.에서 설명한 Hibernate 문서의 오브젝트 작업입니다.확실히 꼭 읽어야 할 책이죠.

휴지 상태의 개체 상태는 다음과 같습니다.

과도 - 새 연산자를 사용하여 인스턴스화된 개체를 과도 개체라고 합니다.

개체가 새 연산자를 사용하여 인스턴스화된 지 얼마 안 되어 휴지 상태 세션과 연결되지 않은 경우 개체는 일시적입니다.데이터베이스에 영속적인 표현이 없고 식별자 값이 할당되지 않았습니다.응용 프로그램이 더 이상 참조를 보유하지 않으면 가비지 컬렉터에 의해 임시 인스턴스가 삭제됩니다.

지속성 - 데이터베이스 ID가 연결된 개체를 영구 개체라고 합니다.

영속 인스턴스는 데이터베이스 내의 표현과 식별자 값을 가진다.저장 또는 로딩되었을 뿐이지만 세션의 범위에 정의되어 있습니다.휴지상태는 지속상태의 오브젝트에 대한 변경을 검출하여 작업단위가 완료되면 상태를 데이터베이스와 동기화합니다.

분리됨 - 분리 인스턴스는 영구적이지만 세션이 닫힌 개체입니다.

분리된 인스턴스는 나중에 새 세션에 재연결하여 다시 영구화할 수 있습니다.이 기능을 통해 사용자의 씽크 타임을 필요로 하는 장기 실행 단위의 프로그래밍 모델을 사용할 수 있습니다.애플리케이션 트랜잭션, 즉 사용자의 관점에서 작업 단위라고 합니다.

http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32012

가비지 컬렉터의 관점에서도 설명하겠습니다.

휴지 상태의 오브젝트 상태는 3가지입니다(또는 휴지 상태의 오브젝트 범위).

  1. 과도 상태
  2. 지속 상태
  3. 분리 상태

코드의 예를 들어 이해하는 것이 좋다.

POJO 클래스는 Student Object로 간주합니다.>

Student student = new Student(); 

이 학생 오브젝트는 일시적인 상태입니다.


이 POJO 오브젝트를 접속하여 세션을 휴지 상태로 만들 때 ->

session.save(student);

이 POJO 오브젝트는 영속적인 상태입니다.

(가스 수집기 관점 - GC는 영구 상태에 있는 개체를 삭제할 수 없습니다.영속적인 상태는 POJO 오브젝트의 임시 스토리지와 같다고 말할 수 있습니다.


실행했을 경우 ->

session.beginTransaction.commit();

POJO 오브젝트가 Permanent 또는 Database 스토리지 상태가 됩니다.

(가스 수집기 관점 - 이 POJO 개체는 이제 JVM의 범위를 벗어나 데이터베이스 내의 폼 테이블에 저장되므로 GC에서 이 개체를 삭제할 수 없습니다.이 데이터베이스 스토리지 상태는 POJO 오브젝트용 영속 스토리지라고 할 수 있습니다.)


실행했을 경우 ->

session.evict(student); 

그 후 POJO 오브젝트는 영구 상태에서 분리 상태로 제거 또는 삭제됩니다.SOO 이 POJO 객체의 상태는 분리 상태입니다.

(가스 수집기의 관점 - GC는 JVM에서 분리된 상태의 POJO 개체를 쉽게 삭제할 수 있습니다.)

다음 엔티티가 지정됩니다.

@Entity
public class City {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)    
    private long id;

    // other fields and methods.
}

Hibernate 5.2 문서에서 (또한,removed★★★★★

일시적인

엔티티는 인스턴스화되었을 뿐 지속성 컨텍스트와 관련되어 있지 않습니다.데이터베이스에는 영속적인 표현이 없으며 일반적으로 식별자 값이 할당되지 않았습니다(할당된 생성기가 사용되지 않은 경우).

City city = new City();

관리 대상 또는 영속적

엔티티에는 관련된 식별자가 있으며 지속성 컨텍스트와 관련되어 있습니다.데이터베이스에 물리적으로 존재할 수도 있고 존재하지 않을 수도 있습니다.

// city will be in a managed/persistent state and any changes to it, will be tracked by hibernate
// and reflected to the database when the persistence context is flushed.
session.save(city);

떨어져 있다

엔티티는 연관된 식별자를 가지고 있지만 더 이상 지속성 컨텍스트와 관련지어지지 않습니다(보통 지속성 컨텍스트가 닫혔거나 컨텍스트에서 인스턴스가 제거되었기 때문에).

// city is in a detached state, Hibernate is no longer aware of the entity 
session.evict(city)

제거된

엔티티에는 관련된 식별자가 있으며 지속성 컨텍스트와 관련되어 있지만 데이터베이스에서 삭제하도록 스케줄 되어 있습니다.

session.remove(city);


주의: Hibernate API는 엔티티 상태를 전환할 수 있는 몇 가지 메서드를 제공하며, Hibernate Session 클래스를 살펴볼 가치가 있다고 생각합니다.

이미 식별된 정답 외에 persistent, transient, disparted는 hibernate 상태의 오브젝트입니다.

보다 정확하게 말하면, 이들 3개의 상태는 실제로 휴지 상태의 오브젝트 변경과 세션의 라이프 사이클 상태를 나타냅니다.

언급URL : https://stackoverflow.com/questions/2573739/what-are-detached-persistent-and-transient-objects-in-hibernate

반응형