如何使用Spring注入JPA EntityManager

44

是否有可能让Spring在不继承JpaDaoSupport的情况下将JPA entityManager对象注入到我的DAO类中?如果可以,那么在这种情况下,Spring是否管理事务?

我正在尝试尽可能简化我的Spring配置:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="em"/>
</bean>
<bean id="em" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="myPU"/>
</bean>
3个回答

33

12
请看这里,文档12.6.3. Implementing DAOs based on plain JPA中明确指出,即使不使用任何Spring依赖项,也可以使用注入的EntityManagerFactoryEntityManager来编写针对普通JPA的代码。请注意,如果启用了PersistenceAnnotationBeanPostProcessor,Spring可以理解字段和方法级别上的@PersistenceUnit@PersistenceContext注释。相应的DAO实现可能如下所示(...)。关于事务管理,请参阅12.7. Transaction Management,Spring JPA允许配置一个JpaTransactionManager来将JPA事务暴露给访问同一JDBC数据源的JDBC访问代码,前提是注册的JpaDialect支持检索底层JDBC连接。Spring提供了Toplink、Hibernate和OpenJPA JPA实现的方言。有关JpaDialect机制的详细信息,请参见下一节。

3
最新的Spring + JPA版本从根本上解决了这个问题。 您可以在单独的线程中了解如何一起使用Spring和JPA。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接