[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.이 링크 확인
이 링크 확인
확장해야 할 수도 있습니다.
org.springframework.orm.jpa.vendor.HibernateJpaDialect
이게 도움이 되길 바란다!
-
==============================
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.다른 옵션으로 org.hibernate.flushMode 설정을 사용하여 특정 flush 모드를 사용하도록 Hibernate EntityManager를 직접 설정할 수있다.
다른 옵션으로 org.hibernate.flushMode 설정을 사용하여 특정 flush 모드를 사용하도록 Hibernate EntityManager를 직접 설정할 수있다.
-
==============================
4.이 유형의 설정을 봄에 사용할 수 있는지 확실하지 않습니다. (나는 그것을 보지 못했다) 그러나, 대안으로 hibernate는 generics로 전달할 경우 모든 클래스에 사용할 수있는 일반적인 CRUD 메소드를 제공합니다. Update / Create 메소드의 flush 메소드를 호출하고 이들 메소드를 독점적으로 사용하여 모든 클래스를 작성 / 갱신하십시오.
이 유형의 설정을 봄에 사용할 수 있는지 확실하지 않습니다. (나는 그것을 보지 못했다) 그러나, 대안으로 hibernate는 generics로 전달할 경우 모든 클래스에 사용할 수있는 일반적인 CRUD 메소드를 제공합니다. Update / Create 메소드의 flush 메소드를 호출하고 이들 메소드를 독점적으로 사용하여 모든 클래스를 작성 / 갱신하십시오.
다음은 그 예입니다.
http://www.ibm.com/developerworks/java/library/j-genericdao/index.html
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
'SPRING' 카테고리의 다른 글
[SPRING] Mac 10.12.1의 STS.app는 항상 .eclipse에 새로운 org.springsource.sts 폴더를 만듭니다. (0) | 2019.02.15 |
---|---|
[SPRING] WebApplicationContext가 autowire하지 않습니다. (0) | 2019.02.15 |
[SPRING] wildfly 10의 HTTP 요청을 https로 리디렉션합니다. (0) | 2019.02.15 |
[SPRING] 외부 JAR 파일에서 JPA Entity로드 (0) | 2019.02.15 |
[SPRING] 메소드의 @ModelAttribute (0) | 2019.02.15 |