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>
Share:
22,938
Jérôme Verstrynge
Author by

Jérôme Verstrynge

You can contact me via my LinkedIn profile.

Updated on June 02, 2020

Comments

  • Jérôme Verstrynge
    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 the EntityManager 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
    Swapnil Gangrade about 6 years
    How to do the same in application context xml file?
  • Tim Diekmann
    Tim Diekmann almost 6 years
    Generally, 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.