7

Spring 3.1.1.RELEASE、Hibernate 4.1.0.Final、およびJPA2.0を使用しています。トランザクションがJavaコードなしで実行された後にコミットするようにSpringトランザクションを構成する方法はありますか?つまり、アプリケーションコンテキストファイル、Hibernate構成ファイル、またはpersistence.xmlファイルのいずれかでコミットするようにフラッシュモードを設定したいと思います。私のSpringトランザクションサービスクラスは次のようになります

@Transactional(rollbackFor = Exception.class)
@Service
public class ContractServiceImpl implements ContractService
{

    @Autowired
    private ContractDAO m_contractDao;

    public void addContract(Contract contract)
    {
       m_contractDao.create(contract);
    }

    ...

そして私のアプリケーションコンテキストはそのように設定されています…</p>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:myproject" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="persistenceXmlLocation" value="classpath*:META-INF/test-persistence.xml"/>
    <property name="persistenceUnitName" value="testingDatabase"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="sharedEntityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
   <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

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

<tx:annotation-driven />

私のpersistence.xmlファイルは

<persistence version="2.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_2_0.xsd">
        <persistence-unit name="testingDatabase" transaction-type="RESOURCE_LOCAL">
                <provider>org.hibernate.ejb.HibernatePersistence</provider>
                <properties>
                        <property name="hibernate.ejb.cfgfile" value="/hsql_hibernate.cfg.xml" />
        <property name="org.hibernate.FlushMode" value="commit" />
                </properties>
        </persistence-unit>
</persistence>

そして私の休止状態の設定ファイルは

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.pool_size">1</property>
        <property name="show_sql">true</property>
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">create-drop</property>

        <mapping class="org.mainco.subco.sbadmin.domain.Product" />
        <mapping class="org.mainco.subco.sbadmin.domain.Contract" />
        <mapping class="org.mainco.subco.organization.domain.Country" />
        <mapping class="org.mainco.subco.organization.domain.State" />
        <mapping class="org.mainco.subco.organization.domain.Address" />
        <mapping class="org.mainco.subco.organization.domain.OrganizationType" />
        <mapping class="org.mainco.subco.organization.domain.Organization" />

    </session-factory>
</hibernate-configuration>
4

4 に答える 4

2

web.xml で次のことを試してください。

<filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>flushMode</param-name>
        <param-value>COMMIT</param-value>
    </init-param>
</filter>

参照

于 2012-11-13T14:32:48.760 に答える
1

このリンクを確認してください

延長が必要な場合があります

org.springframework.orm.jpa.vendor.HibernateJpaDialect 

これが役立つことを願っています!

于 2012-11-15T11:52:25.023 に答える
1

別のオプションとして、構成設定を使用して、デフォルトで特定のフラッシュ モードを使用するように Hibernate EntityManager を直接org.hibernate.flushMode構成できます。

于 2012-11-13T19:50:32.917 に答える
0

このタイプの設定が春に利用できるかどうかはわかりません。(私は見たことがありません)しかし、代わりに hibernate は、ジェネリックとして渡す場合にすべてのクラスに使用できるジェネリック CRUD メソッドを提供します。フラッシュ メソッドの呼び出しを Update/Create メソッドに配置し、これらを排他的に使用してすべてのクラスを作成/更新します。

次に例を示します。

http://www.ibm.com/developerworks/java/library/j-genericdao/index.html

于 2012-11-06T22:43:25.943 に答える