Spring + Spring Data JPA配置

时间:2012-05-01 00:54:34

标签: spring java-ee persistence spring-data spring-data-jpa

目前我正在使用Spring设置。我的目标是使用JPA使用它的JNDI名称访问Websphere数据源。我正在使用Spring Data JPA让我的生活更轻松,并通过一些教程来获得基本的想法。

坏事:没有人在谈论我的JPA szenario的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标签的文档?我错过了szenario的重要标签吗?

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>

这里也是一样:不知道我在做什么。我知道我需要一个持久性单元/提供者。我知道有很多人正在使用hibernate,但是如果可能的话,我希望保持原生并使用纯JavaEE / Spring。 我只是不确定如何配置。 目前我的项目正在崩溃,告诉我:“JPA PersistenceProvider返回null”

3 个答案:

答案 0 :(得分:4)

最好的方法是通过Spring的JNDI支持从JNDI获取EntityManagerFactory

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/myPersistenceUnit" />

<jpa:repositories base-package="com.acme.repositories" />

<tx:jta-transactionManager />

这将导致从应用程序服务器使用事务管理器。您还可以尝试设置JpaTransactionManager并将从JNDI获得的EntityManagerFactory连接到其中。如果只通过<jee:jndi-lookup />命名空间元素查找数据源并按照Spring Data JPA参考文档中的其他配置说明进行操作,则可以将更多配置提取到Spring配置文件中。然而,如果您决定使用容器资源,通常最好使用您实际可以获得的容器资源。

答案 1 :(得分:3)

我刚刚开始使用Spring,jpa mysql等...我可以帮助你。 我将向您展示我对配置的了解方式。

我正在使用hibernate作为我的数据库连接,我从来没有这样做,没有那么没有我的帮助:)

我的配置:

弹簧config.xml中:

<context:component-scan base-package="com.MYPACKAGE"/> 
<!-- To find all your controllers -->

<tx:annotation-driven/> 
<!-- This will pickup all your @Transactional annotations-->

<import resource="../database/DataSource.xml"/>
<import resource="../database/Hibernate.xml"/>
<!-- These are my database config files-->

Datasource.xml:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/DATABASENAME"/>
    <property name="username" value="USERNAME"/>
    <property name="password" value="PASSWORD"/>
</bean>

Hibernate.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="false"/>
            <property name="generateDdl" value="true"/>
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
        </bean>
    </property>
</bean>

我遗漏了您需要包含在.xml文件顶部的标准xml文本,但我相信您可以自己解决这个问题;)

此设置适用于我,我希望它可以帮助你! 如果您对此帖有任何疑问,请告诉我们!

祝你好运!

答案 2 :(得分:2)

对于那些使用JBoss的人来说,可以在persistence.xml属性中设置jndi名称,如下所示:

    <persistence-unit name="punit" transaction-type="JTA">

      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/myDS/jta-data-source>

      <class>com.company.model.Document</class>
      <class>com.company.model.DocumentIndividual</class>

      <properties>
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> -->
        <property name="javax.persistence.logging.level" value="INFO" />
        <property name="hibernate.show_sql" value="true" />
        <property name="jboss.entity.manager.jndi.name" value="java:/my_em"/>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:/my_emf"/>
    </properties>

</persistence-unit>

here第4.4.2节

中所述