From 2fbdd53493a1bcdd56e6f736d65941693f59da98 Mon Sep 17 00:00:00 2001 From: Stanislav Bashkyrtsev Date: Sat, 3 Sep 2016 20:00:33 +0300 Subject: [PATCH] DATAJPA-993 - Improved example of infrastructure setup in reference documentation. Previously EntityManagerFactory was created manually which resulted in LocalContainerEntityManagerFactoryBean not being exposed to ApplicationContext. The latter is an important bean since it enables exception translation. Original pull request: #180. --- src/main/asciidoc/jpa.adoc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/asciidoc/jpa.adoc b/src/main/asciidoc/jpa.adoc index c2d2965f6..10800297a 100644 --- a/src/main/asciidoc/jpa.adoc +++ b/src/main/asciidoc/jpa.adoc @@ -65,7 +65,7 @@ class ApplicationConfig { } @Bean - public EntityManagerFactory entityManagerFactory() { + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); @@ -74,9 +74,7 @@ class ApplicationConfig { factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("com.acme.domain"); factory.setDataSource(dataSource()); - factory.afterPropertiesSet(); - - return factory.getObject(); + return factory; } @Bean @@ -89,6 +87,7 @@ class ApplicationConfig { } ---- ==== +NB: It's important to create `LocalContainerEntityManagerFactoryBean` and not `EntityManagerFactory` directly since the former also participates in exception translation mechanisms besides simply creating `EntityManagerFactory`. The just shown configuration class sets up an embedded HSQL database using the `EmbeddedDatabaseBuilder` API of spring-jdbc. We then set up a `EntityManagerFactory` and use Hibernate as sample persistence provider. The last infrastructure component declared here is the `JpaTransactionManager`. We finally activate Spring Data JPA repositories using the `@EnableJpaRepositories` annotation which essentially carries the same attributes as the XML namespace does. If no base package is configured it will use the one the configuration class resides in.