How to set some Hibernate properties in Spring JPA Web Application?
22,938
Solution 1
Spring provides a way to configure these options in provider-independent way using AbstractJpaVendorAdapter
(setDatabase()
and setGenerateDdl()
, though setGenerateDdl()
doesn't take DDL mode).
Alternatively, you can pass arbitrary properties to LocalContainerEntityManagerFactory
using setJpaProperties()
(or setJpaPropertyMap()
):
Properties props = new Properties();
props.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
props.put("hibernate.hbm2ddl.auto", "create");
factoryBean.setJpaProperties(props);
Solution 2
This is the old question but might help someone who is using XML for configuration.
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="test-jpa"/>
<property name="dataSource" ref="dataSourceProxy"/>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
<property name="database" value="MYSQL"/>
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.jdbc.batch_size" value="10"/>
<entry key="hibernate.jdbc.fetch_size" value="10"/>
<entry key="hibernate.order_inserts" value="true"/>
<entry key="hibernate.order_updates" value="true"/>
<entry key="hibernate.jdbc.batch_versioned_data" value="true"/>
<entry key="hibernate.format_sql" value="true"/>
</map>
</property>
</bean>
Comments
-
Jérôme Verstrynge almost 4 years
I am trying to get rid of the typical
persistence.xml
file in Spring JPA web application. So far, I have managed to inject theEntityManager
successfully with the following:@Configuration @EnableTransactionManagement public class JpaConfig { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){ LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setDataSource( this.restDataSource() ); factoryBean.setPackagesToScan( new String[ ] { "com.jverstry" } ); factoryBean.setPersistenceUnitName("MyMy"); JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(){ { // JPA properties ... } }; factoryBean.setJpaVendorAdapter( vendorAdapter ); return factoryBean; } @Bean public DataSource restDataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); dataSource.setUrl("jdbc:hsqldb:mem:testdb"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; } @Bean public PlatformTransactionManager transactionManager(){ JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory( this.entityManagerFactoryBean().getObject() ); return transactionManager; } }
I have managed to move the properties of my persistence.xml for the datasource:
<properties> ... <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties>
but how to I set the two remaining hibernate properties above? Thanks
-
Swapnil Gangrade about 6 yearsHow to do the same in application context xml file?
-
Tim Diekmann almost 6 yearsGenerally, answers are much more helpful if they include an explanation of what the code is intended to do, and why that solves the problem without introducing others.