我正在使用Spring 3.1.1.RELEASE,Hibernate 4.1.0.Final和JPA 2.0。有没有一种方法可以配置Spring事务以在不使用Java代码的情况下执行事务后提交?换句话说,我想将刷新模式设置为在应用程序上下文文件,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); } ...
我的应用程序上下文设置如下:
<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>
我的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>
检查此链接
您可能需要扩展
org.springframework.orm.jpa.vendor.HibernateJpaDialect
我希望这有帮助!