目前我正在玩 Spring 设置。我的目标是使用 JPA 访问使用其 JNDI 名称的 Websphere 数据源。我正在使用 Spring Data JPA 让我的生活更轻松,并通过一些教程来了解基本概念。
坏事:这些都不是在谈论我的 JPA 场景的 Spring 配置 + 我以前从未使用过 JPA/JDBC。 所以我希望你能在这里帮助我。我有 2 个配置文件:
applicationContext.xml
<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="eManager" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"></bean>
由于我在我的代码中使用@Transactual 注释,因此我正在为 txManager 使用注释驱动标签。我只是不确定我应该为 txManager 配置什么以及 sessionFactory 标签在做什么。是否有所有支持的 XML 标签的文档?我是否缺少我的场景的重要标签?
eManager 也是如此——不确定这是否正确。
persistence.xml
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="spring-jpa">
<jta-data-source>jdbc/myJNDI</jta-data-source>
</persistence-unit>
</persistence>
同样的事情:我真的不知道我在做什么。我知道我需要一个持久性单元/提供者。我知道很多人为此使用休眠,但如果可能的话,我想保持原生并使用纯 JavaEE/Spring。 我只是不确定如何配置它。 目前我的项目正在崩溃,告诉我:“JPA PersistenceProvider 返回 null”
最佳答案
最好的方法是获取EntityManagerFactory
通过 Spring 的 JNDI 支持从 JNDI:
<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/myPersistenceUnit" />
<jpa:repositories base-package="com.acme.repositories" />
<tx:jta-transactionManager />
这将导致应用服务器也使用事务管理器。您也可以尝试设置 JpaTransactionManager
并连接EntityManagerFactory
从 JNDI 获取到它。如果您只通过 <jee:jndi-lookup />
查找数据源,则可以将更多配置放入 Spring 配置文件中。命名空间元素并遵循 Spring Data JPA 引用文档中的进一步配置说明。不过,如果您决定使用容器资源,通常最好使用您实际可以获得的容器资源。
关于Spring + Spring Data JPA 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10392307/