整合Spring和JPA

來源:互聯網
上載者:User
整合Spring和JPA第二種方式 擷取EntityManagerFactory的方法是使用springframe的 LocalContainerEntityManagerFactoryBean 。

將前面擷取EntityManagerFactory的class引用改一下:

        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
        </bean>

我們只需要配置persistenceXmlLocation這個屬性,指定到classpath裡面的META-INF/persistence.xml。

這種方式是配置JPA的強大的方法。因為它允許在應用程式中靈活進行本地配置。它支援串連現有JDBC資料來源,支援本地事務(RESOURCE_LOCAL)和全域事務(JTA)。

另外,還可以與dataSource一起使用,我們的persistence.xml裡面不用寫串連的屬性了,直接就寫名字和對應的實體就可以了,例如:

<?xml version="1.0" encoding="UTF-8"?>
<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="MyPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>

<class>myentiry.UserInfo</class>

</persistence-unit>

</persistence>

spring的applicationContext設定檔:

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
            <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
            <property name="url" value="jdbc:sqlserver://192.168.2.44:1433;databaseName=test" />
            <property name="username" value="sa" />
            <property name="password" value="sa" />  
            <property name="initialSize" value="5" />
            <property name="minIdle" value="5" />     
            <property name="maxIdle" value="30" />             
            <property name="maxActive" value="100" />
            <property name="maxWait" value="1000" />
        </bean>

   <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />

     <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
            <property name="persistenceUnitName" value="MyPU" />
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="showSql" value="false" />
                    <property name="generateDdl" value="false" />
                </bean>
            </property>
        </bean>

第三者方式是用jee:jndi-lookup從JNDI中擷取EntityManagerFactory

<bean>

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

</bean>

在商務邏輯層裡面我們得使用@Transactional注釋標識,不然方法不會提交事務。

有關spring事務傳播和事務隔離請看:

hi.baidu.com/coolcat%5Fpolice/blog/item/59ebc12324be8d4b935807d4.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.