tutorial mediante libro framework español desarrollo book arquitectura aplicaciones spring hibernate jpa transactions flush

spring - mediante - ¿Cómo configuro el modo de descarga en "COMMIT" en mis archivos de configuración?



spring framework pdf español (4)

Estoy usando Spring 3.1.1.RELEASE, Hibernate 4.1.0.Final y JPA 2.0. ¿Hay alguna manera de configurar las transacciones de Spring para confirmar después de que las transacciones se ejecuten sin código Java? En otras palabras, me gustaría configurar el modo de descarga para confirmar en el archivo de contexto de la aplicación, el archivo de configuración de hibernación o el archivo persistence.xml. La clase de servicio de transacciones de My Spring se parece a

@Transactional(rollbackFor = Exception.class) @Service public class ContractServiceImpl implements ContractService { @Autowired private ContractDAO m_contractDao; public void addContract(Contract contract) { m_contractDao.create(contract); } ...

y mi contexto de aplicación está configurado así ...

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

Mi archivo persistence.xml es

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

y mi archivo de configuración de hibernación es

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


Ver este enlace

Es posible que necesite extender

org.springframework.orm.jpa.vendor.HibernateJpaDialect

¡Espero que esto ayude!


No estoy seguro de si este tipo de configuración está disponible en primavera. (No he visto ninguno) Pero, como alternativa, hibernate brinda métodos CRUD genéricos que puede usar para todas sus clases si los pasa como genéricos. Simplemente ponga la llamada al método de lavado en los métodos Actualizar / Crear y utilícelos exclusivamente para crear / actualizar todas sus clases.

Aquí hay un ejemplo:

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


Como otra opción, puede configurar Hibernate EntityManager directamente para usar un determinado modo de descarga de forma predeterminada utilizando la configuración de configuración org.hibernate.flushMode .


Pruebe lo siguiente en su 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>

Referencia .