2013-01-13 2 views
0

내가 가입 한 새 프로젝트에서 그들은 Hibernate와 JPA라는 용어를 혼용해서 계속 사용한다. 그래서, 코드로 들어가서이 모든 일이 어떻게 작동하는지 이해하려고 노력했습니다 (저는 Spring, JPA 및 Hibernate 세계에 익숙하지 않습니다). 더 나은 이해를 위해 여기에 코드를 삽입하려고합니다 : 그래서,이 구성 클래스에서, 우리는의 EntityManagerFactory를 반환하는봄 + 최대 절전 모드 + jpa 어떻게 작동합니까?

@Resource 
private HibernateJpaVendorAdapter hibernateOracleJpaVendorAdapter; 

LocalContainerEntityManagerFactoryBean entityManager = 
new LocalContainerEntityManagerFactoryBean(); 
entityManager.setJpaVendorAdapter(hibernateOracleJpaVendorAdapter); 
entityManager.setPersistenceUnitName("abc"); 
      . 
      . 

: 1)에서는 다음과 같은 가지고 @Configuration 클래스가있다.

2) 다음 저장소의 방법 (예를 들면 호출 @Persistor 표시된 persistor 클래스) 저장 작업 들어있다 :

blahblahRepository.save(blahblahEntity, abcdef); 

3) 드디어 저장소 클래스가 @Repository 님이 주석 달기. 다음과 같이

getEntityManager().persist(entityObject); 

내 질문

다음과 같습니다 :

@PersistenceContext(unitName = "same as the name in persistence.xml") 
protected EntityManager entityManager; 

"저장"방법은 JPA의 유지 방법 감싸는 : 그럼 다시, 그들은이 코드 조각이 1) 어떤 단어도 없다 hibernateJpaVendorAdapter가 아닌 Hibernate에 관해서. 전체 작업 공간을 검색했는데 구성 파일에 최대 절전 모드 단어가 3 번 나타났습니다. 2) 가지고있는 지식에 관계없이 EntityManagerFactory 또는 EntityManager 중 하나를 사용해야하지만 둘 다 수행하고 있습니까?

답변

0

Hibernate는 JPA 스펙의 구현 중 하나입니다. 프로젝트가 JPA 구현으로서 Hibernate를 선택했기 때문에, Hibernate를 위임하는 JPA API를 사용합니다. 특정 Oracle 또는 PostgreSQL 드라이버에 위임 한 JDBC API를 사용할 때와 같습니다.

EntityManagerFactory는 이름에서 알 수 있듯이 EntityManager의 팩토리입니다. 왜 둘 다 사용하지 않을지 모르겠다. EntityManager는 JPA API의 기본 인터페이스이며 모든 데이터베이스 작업 (찾기, 지속, 병합, 쿼리 등)을 실행하는 데 사용됩니다. EntityManagerFactory는 EntityManager를 생성하기 전에 구성되어야합니다.

+0

당신은 그것을하지 않습니다. Spring은 그것을 당신을 위해 수행하고 그것을 Spring 빈에 주입한다. –

+0

실례지만, EntityManagerFactory에서 엔티티 관리자를 만들지 않습니다. 지금까지 읽은 블로그/문서는 @PersistenceContext (unit = "abc") EntityManager em; 또는 @PersistenceUnit EntityManagerFactory emf; EntityManagerFactory.createEntityManager()는 EntityManager를 만듭니다. 내 이해가 잘못 되었나요? 그렇지 않다면 우리는 왜 이런 식으로하고 있습니까? – user123

관련 문제