Dúvida Spring + Jpa + Hibernate

0 respostas
bsl.lacerda

Bom dia!
Galera, estou preparando uma apresentação e estou me baseando no tutorial da apache http://cwiki.apache.org/S2WIKI/struts-2-spring-2-jpa-ajax.html.

De acordo com o tutorial, o persistence.xml fica desta forma:

<persistence 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_1_0.xsd"
    version="1.0">
    <persistence-unit name="punit">
    </persistence-unit>
</persistence>

e o applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

    <bean
        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    <bean id="personService" class="quickstart.service.PersonServiceImpl" />

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean
                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="MYSQL" />
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost/test" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="personAction" scope="prototype"
        class="quickstart.action.PersonAction">
        <constructor-arg ref="personService" />
    </bean>
</beans>

Estava dando uma olhada nas classes do Spring
org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter e
org.springframework.jdbc.datasource.DriverManagerDataSource
e reparei que elas possuem alguns atributos para configurar peculiaridades da conexão como showSql etc, mas não encontrei nenhum atributo para configurar outras propriedades da conexão como
hibernate.transaction.factory_class, hibernate.query.factory_class, hibernate.cache.provider_class entre outras.

Daria para configurar todas as propriedades no persistence.xml ou somente as que não encontrei nas classes do Spring.
Ex:
persistence.xml

<persistence-unit name="presentationPUnit" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>com.Classe</class>
		<properties>
  			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost/new_db" />
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
                        <property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="root" />  
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
			<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
			<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
			<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory" />
    	</properties>
	</persistence-unit>

Perguntas:
Seria elegante configurar as propriedades que não encontrei nas classes do Spring no persistence.xml, descentralizando as propriedades da conexão? (acho que não)
haveria outra classe do Spring onde eu possa declarar estas configurações? (Tipo em um outro bean)
Outra coisa, reparei que mesmo que eu não declare o provider e as classes no persistence.xml, tudo funciona perfeitamente. (a princípio)

Qual seria a forma mais correta de configurar Spring + Jpa + Hibernate sem abrir mão de todas as peculiaridades da conexão com o BD?

Obrigado.

Criado 9 de outubro de 2008
Respostas 0
Participantes 1