Spring 如何将刷新模式设置为“刷新模式”;“提交”;在我的配置文件中?
我使用的是Spring3.1.1.RELEASE、Hibernate4.1.0.Final和JPA2.0。有没有一种方法可以将Spring事务配置为在没有Java代码的情况下执行事务后提交?换句话说,我想在应用程序上下文文件、hibernate配置文件或persistence.xml文件中将flush模式设置为commit。我的Spring事务服务类看起来像Spring 如何将刷新模式设置为“刷新模式”;“提交”;在我的配置文件中?,spring,hibernate,jpa,transactions,flush,Spring,Hibernate,Jpa,Transactions,Flush,我使用的是Spring3.1.1.RELEASE、Hibernate4.1.0.Final和JPA2.0。有没有一种方法可以将Spring事务配置为在没有Java代码的情况下执行事务后提交?换句话说,我想在应用程序上下文文件、hibernate配置文件或persistence.xml文件中将flush模式设置为commit。我的Spring事务服务类看起来像 @Transactional(rollbackFor = Exception.class) @Service public class C
@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>
org.hibernate.ejb.HibernatePersistence
我的hibernate配置文件是
<?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.hibernate.dialogue.hsql方言
创建下降
我不确定这种设置在春季是否可用。(我没见过)但是,
作为替代方案,hibernate提供了泛型CRUD方法,如果您将它们作为泛型传入,则可以对所有类使用这些方法。只需在Update/Create方法中调用flush方法,并专门使用这些方法来创建/更新所有类
以下是一个例子:
在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>
openSessionInViewFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
冲洗模式
犯罪
.作为另一个选项,您可以使用
org.Hibernate.flushMode
配置设置直接将Hibernate EntityManager配置为默认情况下使用特定的刷新模式。检查此项
你可能需要延长时间
org.springframework.orm.jpa.vendor.HibernateJpaDialect
我希望这有帮助 您好,我在问题中只指定了b/c“无Java代码”,我将在搜索时推迟接受您的答案。以Thx为例,tho。我应该在哪里添加它?我在persistence.xml文件中包含了该指令(请参见问题编辑),但在我的DAO中对“entityManager.getFlushMode()”的调用仍然返回“auto”。您必须调用Hibernate会话以确定效果(该设置影响基础会话):
entityManager.unwrap(Session.class).getFlushMode()
回想起来,它可能也会影响本地EntityManager刷新模式。是的,我尝试了您建议的读取刷新模式的替代方法,但它仍然返回“自动”。您好,关于这个答案,我没有web.xml文件。我的Maven项目构建了一个JAR。它使用Spring库进行事务处理,但没有web组件。