如何使用弹簧注入JPA实体管理器

2022-09-01 01:06:56

是否可以让Spring将JPA对象注入我的DAO类而不扩展?如果是,在这种情况下,Spring是否管理交易?entityManagerJpaDaoSupport

我试图让我的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>

答案 1

是的,尽管它充满了陷阱,因为JPA有点奇怪。非常值得一读的关于注入 JPA 和 的文档,而无需在代码中使用显式的 Spring 依赖项:EntityManagerEntityManagerFactory

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

这允许您注入 ,或者直接注入 线程安全的事务代理。后者使代码更简单,但意味着需要更多的弹簧管道。EntityManagerFactoryEntityManager


答案 2

是否有可能让 Spring 将 JPA 实体管理器对象注入到我的 DAO 类中,以扩展 JpaDaoSupport?如果是,在这种情况下,spring是否管理交易?

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

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

关于事务管理,请看一下12.7。交易管理

Spring JPA 允许配置向访问同一 JDBC 数据源的 JDBC 访问代码公开 JPA 事务,前提是注册的 JDBC 连接支持检索基础 JDBC 连接。开箱即用,Spring为Toplink,Hibernate和OpenJPA JPA实现提供了方言。有关该机制的详细信息,请参阅下一节。JpaTransactionManagerJpaDialectJpaDialect


推荐