繁体   English   中英

如何使用spring注入JPA EntityManager

[英]How to inject JPA EntityManager using spring

有没有可能让Spring将JPA entityManager对象注入我的DAO类而不扩展JpaDaoSupport 如果是,那么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>

是的,虽然它充满了陷阱,因为JPA有点奇怪。 非常值得阅读有关注入JPA EntityManagerEntityManagerFactory的文档,而代码中没有明确的Spring依赖项:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa

这可以让你无论是注入EntityManagerFactory ,否则注入的线程安全的,事务代理EntityManager直接。 后者使代码更简单,但意味着需要更多的Spring管道。

是否有可能让spring将JPA entityManager对象注入我的DAO类whitout,扩展JpaDaoSupport? 如果是的话,在这种情况下Spring会管理交易吗?

这在12.6.3中以白色记录为黑色 基于普通JPA实现DAO

可以使用注入的EntityManagerFactoryEntityManager在不使用任何Spring依赖项的情况下针对普通JPA编写代码。 请注意,如果启用了PersistenceAnnotationBeanPostProcessor ,Spring可以在字段和方法级别理解@PersistenceUnit@PersistenceContext注释。 相应的DAO实现可能看起来像这样(...)

关于交易管理,请看12.7。 交易管理

Spring JPA允许配置的JpaTransactionManager将JPA事务公开给访问相同JDBC DataSource的JDBC访问代码,前提是已注册的JpaDialect支持检索底层JDBC Connection。 开箱即用,Spring为Toplink,Hibernate和OpenJPA JPA实现提供方言。 有关JpaDialect机制的详细信息,请参阅下一节。

最新的Spring + JPA版本从根本上解决了这个问题。 您可以在单独的线程中了解有关如何使用Spring和JPA的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM