2012-09-23 58 views
0

我決定使用Spring,Hibernate和Restlet來創建Web服務。我對這三種技術都很陌生。我的問題是:如何決定是使用JPA的EntityManager還是Hibernate的HibernateTemplateJPA的EntityManager或Spring的HibernateTemplate

爲JPA的EntityManager的代碼片段:對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沒有的功能。你也使用JPQL而不是HQL嗎?(在開源社區中似乎對HQL有更大的支持)或者你只是使用SQL? – kasavbere

+0

我們使用JPQL代替HQL,它已經解決了我們迄今爲止的所有用例。如果你需要在JPA規範中沒有對應的Hibernate的任何特定功能,你可以把它當作一個異常,使用entityManager.getDelegate獲得SessionFactory,但我懷疑這樣一個特定的需求是否不會有JPA語義本身的解決方法。 – Vikdor

0

如果您想在將來堅持使用hibernate,那麼在使用EntityManagerFactory時沒有意義,您可以繼續使用SessionFactory。只需使用基於java的配置或xml爲此注入定義。它必須在application context中可用。 但是,如果您將來想要移動到不同的jpa提供程序(如toplink等),那麼您應該使用EntityManagerFactory,因爲它允許您從各種提供程序實現。因爲提供者實現了jpa規範。所以將來你只需要在你的應用上下文中有不同的配置,你應該可以使用它。

相關問題