지속성 컨텍스트 란 무엇입니까?


109

저는 Java 세계와 JPA에 익숙하지 않습니다. 나는 JPA를 공부하고 있었고 엔티티, 지속성과 같은 많은 새로운 용어를 발견했습니다. 읽는 동안 Persistence Context 의 정확한 정의를 이해할 수 없었습니다 .

누구나 간단한 평신도 용어로 설명 할 수 있습니까? 에 사용 된 데이터로 @Entity무엇을합니까?

예를 들어,이 정의는 이해하기 너무 복잡합니다.

지속성 컨텍스트는 모든 지속성 ID에 대해 고유 한 엔티티 인스턴스가 있도록하는 엔티티 세트입니다.

답변:


86

지속성 컨텍스트는 일부 지속성 저장소 (예 : 데이터베이스)에서 지속될 데이터를 보유하는 엔티티 집합을 처리합니다. 특히, 컨텍스트는 컨텍스트 및 기본 지속성 저장소와 관련하여 엔티티가 가질 수있는 여러 상태 (예 : 관리 됨, 분리됨)를 알고 있습니다.

Hibernate와 관련이 있지만 (JPA 공급자) 다음 링크가 유용하다고 생각합니다.

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

Java EE에서 지속성 컨텍스트는 일반적으로 EntityManager를 통해 액세스됩니다.

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

엔티티가 가질 수있는 다양한 상태와 이들 사이의 전환은 아래에 설명되어 있습니다.

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png


흠, 이제 말이 되네요. 컨테이너 관리 및 애플리케이션 관리 엔티티 관리자의 차이점을 알려주는 유사한 "단순"정의가 있습니까?
Amrit 2013

4
컨테이너 대 응용 프로그램은 기본적으로 Entity Manager가 생성 된 위치 (컨테이너 외부 또는 응용 프로그램 내부)를 알려줍니다.
uiron

66
  1. 엔티티는 지속성 컨텍스트사용하여 javax.persistence.EntityManager 인스턴스에 의해 관리됩니다 .
  2. 각각 의 EntityManager의 인스턴스와 연관된 영속 컨텍스트 .
  3. 지속성 컨텍스트 내에서 엔티티 인스턴스와 해당 라이프 사이클이 관리됩니다.
  4. 컨텍스트 지속성 정의 범위에 있는 아래 특정 엔티티 인스턴스가 생성을 유지하고, 제거 하였다.
  5. 영속 컨텍스트는 유사한입니다 캐시 의 집합이 포함되어 영구적 인 엔티티를 한 번 따라서, 트랜잭션이 완료되면 , 모든 영구 객체가 분리 될 때 의 EntityManager의 영속 컨텍스트 와 더 이상 관리되지 않습니다.

1
나는 EclipseLink가 트랜잭션이 완료되지 분리 실체 후 않는 것을 발견 ...
레이 Hulha

컨테이너 관리 지속성 컨텍스트의 캐시는 트랜잭션 기간 동안 만 유지됩니다. 트랜잭션에서 읽은 엔티티는 트랜잭션 완료 후 분리되며 후속 트랜잭션에서 편집하려면 병합해야합니다. EclipseLink . @RayHulha
pritam 쿠마

4
@pritamkumar, 지속성 컨텍스트의 개념을 잘 설명했습니다. EntityManager 개체를 주입하고 주입 된 개체 (예 : 트랜잭션)의 범위를 설정하는 데 사용되는 javax.persistence.PersistenceContext 주석도 있습니다.
Paulo Merson

30

페이지 에서 가져온 :

다음은 JPA 세계에 대한 간단한 치트 시트입니다.

  • 캐시는 데이터의 복사본으로, 복사본은 데이터베이스에서 가져 왔지만 데이터베이스 외부에있는 것을 의미합니다.
  • 캐시 비우기는 수정 된 데이터를 데이터베이스에 다시 넣는 작업입니다.
  • PersistenceContext는 본질적으로 캐시입니다. 또한 자체 비공유 데이터베이스 연결을 갖는 경향이 있습니다.
  • EntityManager는 PersistenceContext (따라서 캐시)를 나타냅니다.
  • EntityManagerFactory는 EntityManager (따라서 PersistenceContext / Cache)를 생성합니다.

하나의 PersisnteceContext가 EntityManager 인스턴스를 가질 수 있습니까? 그리고 하나의 엔티티 관리자가 PersistenceContext를 가질 수 있습니까? PersisntenceContext는 모든 응용 프로그램에 대해 하나뿐입니까?
Roberto

7

지속적인 컨텍스트 데이터를 저장하고 데이터베이스 같은 일부 영구 저장소에 유지 될 자격이있는 개체를 나타냅니다. commit이러한 엔티티가 첨부 된 세션에서 트랜잭션이 되면 Hibernate는 영구 컨텍스트를 플러시하고 이들에 대한 변경 ( 삽입 / 저장, 업데이트 또는 삭제 )은 영구 저장소에 유지됩니다.


7

org.hibernate.SessionAPI와 javax.persistence.EntityManagerAPI는 모두 영구 데이터를 처리하기위한 컨텍스트를 나타냅니다.

이 개념을 지속성 컨텍스트 라고합니다 . 영구 데이터에는 지속성 컨텍스트 및 기본 데이터베이스와 관련된 상태가 있습니다.


5

"주어진 시간에 엔티티 관리자 인스턴스가 관리하는 지속 가능한 (엔티티) 인스턴스 세트"를 지속성 컨텍스트라고합니다.

JPA @Entity 주석은 지속 가능한 엔티티를 나타냅니다.

여기에서 JPA 정의 참조


4

평범한 용어로 Persistence Context는 엔티티가 관리되는 환경이라고 말할 수 있습니다. 즉, "Entity"를 데이터베이스와 동기화합니다.


3

@pritam kumar가 좋은 개요를 제공하지만 다섯 번째 요점은 사실이 아닙니다.

지속성 컨텍스트는 트랜잭션 범위 (트랜잭션 길이에 대해 지속성 컨텍스트가 '살아 있음')이거나 확장 됨 (지속성 컨텍스트가 여러 트랜잭션에 걸쳐 있음) 일 수 있습니다.

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

JPA의 EntityManager 및 Hibernate의 세션은 확장 된 지속성 컨텍스트를 제공합니다.


안녕하세요 user2771889, 당신이 맞습니다. 지속성 컨텍스트의 확장 된 범위를 언급하지 않았습니다. 다섯 번째 포인트는 트랜잭션 범위 지속성 컨텍스트와 관련이 있습니다.
pritam kumar 2010 년

2

컨텍스트 지속성환경 또는 캐시 (데이터를 보유하여 데이터베이스에 유지 될 수있는 능력을 가질 수있다) 엔티티 인스턴스가 관리하는 엔티티 관리자 .IT 싱크가 database.All 가진 엔티티 갖는 개체 @Entity의 주석이 가능하다 지속되는 것. @Entity 는 데이터베이스와 통신하기 위해 개체를 생성하는 데 도움이되는 클래스 일 뿐이며 개체가 통신하는 방식은 메서드를 사용하는 것이며 이러한 메서드를 제공하는 사람은 Entity Manager입니다.


1
이 답변은 기존 답변과 어떻게 다릅니 까?
Akin Okegbile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.