Java 如何在Spring JPA Web应用程序中设置一些Hibernate属性?
我试图摆脱SpringJPAWeb应用程序中典型的Java 如何在Spring JPA Web应用程序中设置一些Hibernate属性?,java,spring,hibernate,jpa,configuration,Java,Spring,Hibernate,Jpa,Configuration,我试图摆脱SpringJPAWeb应用程序中典型的persistence.xml文件。到目前为止,我已经成功地通过以下方式注入了EntityManager: @Configuration @EnableTransactionManagement public class JpaConfig { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){ Loca
persistence.xml
文件。到目前为止,我已经成功地通过以下方式注入了EntityManager
:
@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;
}
}
我已成功移动数据源的persistence.xml属性:
<properties>
...
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
...
但是如何设置上面剩下的两个hibernate属性呢?感谢Spring提供了一种使用
AbstractJpaVendorAdapter
以独立于提供程序的方式配置这些选项的方法(setDatabase()
和setGenerateDdl()
,尽管setGenerateDdl()
不采用DDL模式)
或者,您可以使用setJpaProperties()
(或setJpaPropertyMap()
)将任意属性传递到LocalContainerEntityManagerFactory
):
这是一个老问题,但可能对使用XML进行配置的人有所帮助
<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>
另请参见如何在应用程序上下文xml文件中执行相同的操作?通常,如果答案中包含对代码意图的解释,以及在不引入其他内容的情况下解决问题的原因,则会更有帮助。
<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>