Here’s a cleaned up, plug’n’play version of a Spring database XML config taken from a demo project employing Spring Data for the Repositories interfaces and Hibernate behind JPA.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory" />
<jpa:repositories base-package="com.to.my.data.repository"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<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"
p:database="${database.database}"
p:databasePlatform="${database.databasePlatform}"
p:showSql="${database.showSql}"
p:generateDdl="${database.generateDdl}" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">${database.databasePlatform}</prop>
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.fetch_size">50</prop>
<prop key="hibernate.batch_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan" value="com.to.my.bean"/>
</bean>
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"
p:driverClassName="${database.driverClassName}"
p:url="${database.url}"
p:username="${database.username}"
p:password="${database.password}"
p:testOnBorrow="true"
p:testOnReturn="true"
p:testWhileIdle="true"
p:timeBetweenEvictionRunsMillis="1800000"
p:numTestsPerEvictionRun="3"
p:minEvictableIdleTimeMillis="1800000"
p:initialSize="1"
p:maxActive="50"
p:maxIdle="20"/>
</beans>