복붙노트

[SPRING] 구성 파일에서 플러시 모드를 "COMMIT"으로 설정하려면 어떻게합니까?

SPRING

구성 파일에서 플러시 모드를 "COMMIT"으로 설정하려면 어떻게합니까?

Spring 3.1.1.RELEASE, Hibernate 4.1.0.Final 및 JPA 2.0을 사용하고 있습니다. Java 코드없이 트랜잭션이 실행 된 후 커밋 할 Spring 트랜잭션을 구성 할 수있는 방법이 있습니까? 즉, 플러시 모드를 응용 프로그램 컨텍스트 파일, 최대 절전 모드 구성 파일 또는 persistence.xml 파일에서 커밋하도록 설정하고 싶습니다. My 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);
    }

    ...

내 응용 프로그램 컨텍스트가 그렇게 설정되어 있습니다 ...

<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>

해결법

  1. ==============================

    1.이 링크 확인

    이 링크 확인

    확장해야 할 수도 있습니다.

    org.springframework.orm.jpa.vendor.HibernateJpaDialect 
    

    이게 도움이 되길 바란다!

  2. ==============================

    2.web.xml에서 다음을 시도하십시오.

    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>
    

    참고.

  3. ==============================

    3.다른 옵션으로 org.hibernate.flushMode 설정을 사용하여 특정 flush 모드를 사용하도록 Hibernate EntityManager를 직접 설정할 수있다.

    다른 옵션으로 org.hibernate.flushMode 설정을 사용하여 특정 flush 모드를 사용하도록 Hibernate EntityManager를 직접 설정할 수있다.

  4. ==============================

    4.이 유형의 설정을 봄에 사용할 수 있는지 확실하지 않습니다. (나는 그것을 보지 못했다) 그러나, 대안으로 hibernate는 generics로 전달할 경우 모든 클래스에 사용할 수있는 일반적인 CRUD 메소드를 제공합니다. Update / Create 메소드의 flush 메소드를 호출하고 이들 메소드를 독점적으로 사용하여 모든 클래스를 작성 / 갱신하십시오.

    이 유형의 설정을 봄에 사용할 수 있는지 확실하지 않습니다. (나는 그것을 보지 못했다) 그러나, 대안으로 hibernate는 generics로 전달할 경우 모든 클래스에 사용할 수있는 일반적인 CRUD 메소드를 제공합니다. Update / Create 메소드의 flush 메소드를 호출하고 이들 메소드를 독점적으로 사용하여 모든 클래스를 작성 / 갱신하십시오.

    다음은 그 예입니다.

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

  5. from https://stackoverflow.com/questions/13259677/how-do-i-set-flush-mode-to-commit-in-my-configuration-files by cc-by-sa and MIT license