2012-09-23 72 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规范。所以将来你只需要在你的应用上下文中有不同的配置,你应该可以使用它。