2012-09-23 3 views
0

Spring, Hibernate 및 Restlet을 사용하여 웹 서비스를 작성하기로 결정했습니다. 나는이 세 가지 기술에 익숙하지 않다. 내 질문은 : 어떻게 JPA의 EntityManager 또는 최대 절전 모드의 HibernateTemplate을 사용할지 여부를 결정합니까? JPA의 EntityManager에 대한JPA EntityManager 또는 Spring을 사용하는 Hibernate의 HibernateTemplate

코드 : Hibernate의 HibernateTemplate에 대한

protected EntityManager entityManager; 

@PersistenceContext 
public void setEngityManager(EntityManager entityManger) { 
    this.entityManager = entityManager; 
} 

코드는 : 당신이 경우

private SessionFactory sessionFactory; 
private HibernateTemplate hibernateTemplate; 

@Autowired 
public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
    this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
} 

답변

1

interface-based-implementation을 좋아하는 사람은, 다음 JPA는 인터페이스 정의이며, Hibernate는 중 하나입니다 구현. 우리는 JPA 의미론을 프로젝트에서 사용하기로 결정했다. (Hibernate를 매우 비슷하고 가벼운 것으로 대체 할 장기 계획을 가지고).

+0

그러나 Hibernate API는 JPA가 제공하지 않는 몇 가지 기능을 제공한다고 들었습니다. 또한 HQL 대신 JPQL을 사용합니까? (오픈 소스 커뮤니티에서 HQL에 대한 더 큰 지원이있는 것으로 보입니다) 아니면 SQL을 사용합니까? – kasavbere

+0

우리는 HQL 대신에 JPQL을 사용하고 있으며 지금까지 우리의 모든 유스 케이스를 다루고 있습니다. JPA 스펙에 상응하는 것이없는 Hibernate의 특정 기능이 필요하다면, 예외로서 EntityManager.getDelegate를 사용하여 SessionFactory를 가져올 수있다. 그러나 그러한 특정 요구 사항이 JPA 의미론 자체에 대한 해결책을 갖지 않을지는 의문이다 . – Vikdor

0

미래에 hibernate을 고수하고 싶다면 EntityManagerFactory을 사용하고 싶지 않다면 SessionFactory을 사용할 수 있습니다. Java 기반 구성 또는 xml을 사용하여 정의를 삽입하면됩니다. application context에서 사용할 수 있어야합니다. 하지만 앞으로는 다른 jpa 공급자 (예 : toplink 등)로 이동하려는 경우 다양한 공급자의 구현을 가질 수 있으므로 EntityManagerFactory를 사용해야합니다. 공급자가 jpa 사양을 구현하기 때문입니다. 따라서 앞으로는 응용 프로그램 컨텍스트에서 다른 구성을 가질 필요가 있으며이를 사용할 수 있어야합니다.

관련 문제