{"id":15272,"date":"2013-07-15T19:00:33","date_gmt":"2013-07-15T16:00:33","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=15272"},"modified":"2013-07-14T21:54:08","modified_gmt":"2013-07-14T18:54:08","slug":"spring-data-jpa-tutorial-part-one-configuration","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html","title":{"rendered":"Spring Data JPA Tutorial Part One: Configuration"},"content":{"rendered":"<p><a href=\"http:\/\/www.springsource.org\/spring-data\/jpa\" target=\"_blank\">Spring Data JPA<\/a> is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate with a database. I have been using it for a while at my work and in my personal hobby projects and it has indeed make things a lot more simpler and cleaner. Now it is time to share my knowledge with you.<\/p>\n<p>This is the first part of my <a href=\"http:\/\/www.petrikainulainen.net\/spring-data-jpa-tutorial\/\">Spring Data JPA tutorial<\/a> and it will describe to you, how you can configure Spring Data JPA when you are using Hibernate as your JPA provider. Before we will get started, I want to make one thing straight: This tutorial is not an introductory level tutorial to Hibernate, JPA or Spring. You must have some experience about these technologies if you want to understand the concepts described in my Spring Data JPA tutorial.<\/p>\n<p>The dependencies of this tutorial are following:<\/p>\n<ul>\n<li>BoneCP 0.7.1.RELEASE (You can use other data source implementations as well)<\/li>\n<li>Hibernate 4.0.1.Final<\/li>\n<li>Spring Framework 3.1.0.RELEASE<\/li>\n<li>Spring Data JPA 1.0.2<\/li>\n<li>Servlet API 3.0<\/li>\n<\/ul>\n<p>Also, since I am using Maven as a build tool, you must install it if you want to run my example application.<\/p>\n<h2>Getting Started<\/h2>\n<p>It is time to get started. You can configure the Spring Data JPA by following these steps:<\/p>\n<ul>\n<li>You have to obtain the needed dependencies.<\/li>\n<li>You must configure the needed beans in your Spring application context configuration. The beans needed by the Spring Data JPA are: data source, transaction manager and entity manager factory.<\/li>\n<li>You have to configure the Spring Data JPA.<\/li>\n<\/ul>\n<p>These steps are explained with more details in following:<\/p>\n<h2>Obtaining the Needed Depedencies<\/h2>\n<p>First, you need to obtain the needed dependencies. You can do this by configuring the needed dependencies in your <em>pom.xml<\/em> file. The <em>pom.xml<\/em> of my example looks following:<\/p>\n<pre class=\"brush:xml\">&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n        xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\r\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n    &lt;groupId&gt;net.petrikainulainen.spring&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;data-jpa-tutorial-part-one&lt;\/artifactId&gt;\r\n    &lt;packaging&gt;war&lt;\/packaging&gt;\r\n    &lt;version&gt;0.1&lt;\/version&gt;\r\n    &lt;name&gt;Spring Data JPA Tutorial Part One&lt;\/name&gt;\r\n    &lt;description&gt;Spring Data JPA Tutorial Part One&lt;\/description&gt;\r\n    &lt;licenses&gt;\r\n        &lt;license&gt;\r\n            &lt;name&gt;Apache License 2.0&lt;\/name&gt;\r\n            &lt;url&gt;http:\/\/www.apache.org\/licenses\/LICENSE-2.0&lt;\/url&gt;\r\n        &lt;\/license&gt;\r\n    &lt;\/licenses&gt;\r\n    &lt;url&gt;http:\/\/www.petrikainulainen.net&lt;\/url&gt;\r\n    &lt;repositories&gt;\r\n        &lt;repository&gt;\r\n            &lt;id&gt;repository.jboss.org-public&lt;\/id&gt;\r\n            &lt;name&gt;JBoss repository&lt;\/name&gt;\r\n            &lt;url&gt;https:\/\/repository.jboss.org\/nexus\/content\/groups\/public&lt;\/url&gt;\r\n        &lt;\/repository&gt;\r\n    &lt;\/repositories&gt;\r\n    &lt;properties&gt;\r\n        &lt;hibernate.version&gt;4.0.1.Final&lt;\/hibernate.version&gt;\r\n        &lt;mysql.connector.version&gt;5.1.18&lt;\/mysql.connector.version&gt;\r\n        &lt;slf4j.version&gt;1.6.1&lt;\/slf4j.version&gt;\r\n        &lt;spring.version&gt;3.1.0.RELEASE&lt;\/spring.version&gt;\r\n        &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\r\n    &lt;\/properties&gt;\r\n    &lt;dependencies&gt;\r\n        &lt;!-- Spring Framework --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-beans&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-core&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-context-support&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-context&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-jdbc&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-orm&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-tx&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Spring MVC --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-web&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-webmvc&lt;\/artifactId&gt;\r\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;cglib&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;cglib&lt;\/artifactId&gt;\r\n            &lt;version&gt;2.2.2&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Spring Data JPA --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework.data&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-data-jpa&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.0.2.RELEASE&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Hibernate --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\r\n            &lt;version&gt;${hibernate.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;hibernate-entitymanager&lt;\/artifactId&gt;\r\n            &lt;version&gt;${hibernate.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- H2 Database --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;com.h2database&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;h2&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.3.160&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- MySQL JDBC connector --&gt;\r\n        &lt;!-- If you want to use MySQL, uncomment this dependency declation. --&gt;\r\n        &lt;!--\r\n       &lt;dependency&gt;\r\n           &lt;groupId&gt;mysql&lt;\/groupId&gt;\r\n           &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\r\n           &lt;version&gt;${mysql.connector.version}&lt;\/version&gt;\r\n       &lt;\/dependency&gt;\r\n       --&gt;\r\n        &lt;!-- PostgreSQL JDBC 4 --&gt;\r\n        &lt;!-- If you don't want to use PostgreSQL, uncomment this dependency declaration. --&gt;\r\n        &lt;!--\r\n       &lt;dependency&gt;\r\n           &lt;groupId&gt;postgresql&lt;\/groupId&gt;\r\n           &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n           &lt;version&gt;9.0-801.jdbc4&lt;\/version&gt;\r\n       &lt;\/dependency&gt;\r\n       --&gt;\r\n        &lt;!-- BoneCP --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;com.jolbox&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;bonecp&lt;\/artifactId&gt;\r\n            &lt;version&gt;0.7.1.RELEASE&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Servlet API 3.0 --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;javax.servlet&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;javax.servlet-api&lt;\/artifactId&gt;\r\n            &lt;version&gt;3.0.1&lt;\/version&gt;\r\n            &lt;scope&gt;provided&lt;\/scope&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;javax.servlet&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;jstl&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.2&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Logging dependencies --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;slf4j-api&lt;\/artifactId&gt;\r\n            &lt;version&gt;${slf4j.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;slf4j-log4j12&lt;\/artifactId&gt;\r\n            &lt;version&gt;${slf4j.version}&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;log4j&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;log4j&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.2.16&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- Testing Dependencies --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;junit&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;junit&lt;\/artifactId&gt;\r\n            &lt;version&gt;4.9&lt;\/version&gt;\r\n            &lt;scope&gt;test&lt;\/scope&gt;\r\n        &lt;\/dependency&gt;\r\n    &lt;\/dependencies&gt;\r\n    &lt;build&gt;\r\n        &lt;finalName&gt;data-jpa-tutorial-part-one&lt;\/finalName&gt;\r\n        &lt;plugins&gt;\r\n            &lt;plugin&gt;\r\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n                &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\r\n                &lt;version&gt;2.3.2&lt;\/version&gt;\r\n                &lt;configuration&gt;\r\n                    &lt;source&gt;1.6&lt;\/source&gt;\r\n                    &lt;target&gt;1.6&lt;\/target&gt;\r\n                &lt;\/configuration&gt;\r\n            &lt;\/plugin&gt;\r\n            &lt;plugin&gt;\r\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n                &lt;artifactId&gt;maven-war-plugin&lt;\/artifactId&gt;\r\n                &lt;version&gt;2.1.1&lt;\/version&gt;\r\n                &lt;configuration&gt;\r\n                    &lt;failOnMissingWebXml&gt;false&lt;\/failOnMissingWebXml&gt;\r\n                &lt;\/configuration&gt;\r\n            &lt;\/plugin&gt;\r\n            &lt;plugin&gt;\r\n                &lt;groupId&gt;org.mortbay.jetty&lt;\/groupId&gt;\r\n                &lt;artifactId&gt;jetty-maven-plugin&lt;\/artifactId&gt;\r\n                &lt;version&gt;8.1.0.RC2&lt;\/version&gt;\r\n                &lt;configuration&gt;\r\n                    &lt;scanIntervalSeconds&gt;0&lt;\/scanIntervalSeconds&gt;\r\n                    &lt;webAppConfig&gt;\r\n                        &lt;defaultsDescriptor&gt;src\/main\/resources\/webdefault.xml&lt;\/defaultsDescriptor&gt;\r\n                    &lt;\/webAppConfig&gt;\r\n                &lt;\/configuration&gt;\r\n            &lt;\/plugin&gt;\r\n            &lt;plugin&gt;\r\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n                &lt;artifactId&gt;maven-site-plugin&lt;\/artifactId&gt;\r\n                &lt;version&gt;3.0&lt;\/version&gt;\r\n                &lt;configuration&gt;\r\n                    &lt;reportPlugins&gt;\r\n                        &lt;!-- Cobertura Plugin --&gt;\r\n                        &lt;plugin&gt;\r\n                            &lt;groupId&gt;org.codehaus.mojo&lt;\/groupId&gt;\r\n                            &lt;artifactId&gt;cobertura-maven-plugin&lt;\/artifactId&gt;\r\n                            &lt;version&gt;2.5.1&lt;\/version&gt;\r\n                        &lt;\/plugin&gt;\r\n                    &lt;\/reportPlugins&gt;\r\n                &lt;\/configuration&gt;\r\n            &lt;\/plugin&gt;\r\n        &lt;\/plugins&gt;\r\n    &lt;\/build&gt;\r\n&lt;\/project&gt;<\/pre>\n<h2>Configuring the Spring Application Context<\/h2>\n<p>Second, you must configure the Spring application context. As you might remember, you need to configure the data source, transaction manager and entity manager factory beans. If you are using Spring 3.1 and Servlet 3.0, you can do this by implementing a Java configuration class and loading that configuration class in your web application initializer. The content of my application context configuration class is given in following:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java\">import com.jolbox.bonecp.BoneCPDataSource;\r\nimport org.hibernate.ejb.HibernatePersistence;\r\nimport org.springframework.context.MessageSource;\r\nimport org.springframework.context.annotation.*;\r\nimport org.springframework.context.support.ResourceBundleMessageSource;\r\nimport org.springframework.core.env.Environment;\r\nimport org.springframework.orm.jpa.JpaTransactionManager;\r\nimport org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;\r\nimport org.springframework.web.servlet.ViewResolver;\r\nimport org.springframework.web.servlet.config.annotation.EnableWebMvc;\r\nimport org.springframework.web.servlet.view.InternalResourceViewResolver;\r\nimport org.springframework.web.servlet.view.JstlView;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.sql.DataSource;\r\n\r\n\/**\r\n * An application context Java configuration class. The usage of Java configuration\r\n * requires Spring Framework 3.0 or higher with following exceptions:\r\n * &lt;ul&gt;\r\n *     &lt;li&gt;@EnableWebMvc annotation requires Spring Framework 3.1&lt;\/li&gt;\r\n * &lt;\/ul&gt;\r\n * @author Petri Kainulainen\r\n *\/\r\n@Configuration\r\n@ComponentScan(basePackages = {\"net.petrikainulainen.spring.datajpa.controller\"})\r\n@EnableWebMvc\r\n@ImportResource(\"classpath:applicationContext.xml\")\r\n@PropertySource(\"classpath:application.properties\")\r\npublic class ApplicationContext {\r\n   \r\n    private static final String VIEW_RESOLVER_PREFIX = \"\/WEB-INF\/jsp\/\";\r\n    private static final String VIEW_RESOLVER_SUFFIX = \".jsp\";\r\n\r\n    private static final String PROPERTY_NAME_DATABASE_DRIVER = \"db.driver\";\r\n    private static final String PROPERTY_NAME_DATABASE_PASSWORD = \"db.password\";\r\n    private static final String PROPERTY_NAME_DATABASE_URL = \"db.url\";\r\n    private static final String PROPERTY_NAME_DATABASE_USERNAME = \"db.username\";\r\n\r\n    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = \"hibernate.dialect\";\r\n    private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = \"hibernate.format_sql\";\r\n    private static final String PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY = \"hibernate.ejb.naming_strategy\";\r\n    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = \"hibernate.show_sql\";\r\n    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = \"entitymanager.packages.to.scan\";\r\n\r\n    private static final String PROPERTY_NAME_MESSAGESOURCE_BASENAME = \"message.source.basename\";\r\n    private static final String PROPERTY_NAME_MESSAGESOURCE_USE_CODE_AS_DEFAULT_MESSAGE = \"message.source.use.code.as.default.message\";\r\n\r\n    @Resource\r\n    private Environment environment;\r\n\r\n    @Bean\r\n    public DataSource dataSource() {\r\n        BoneCPDataSource dataSource = new BoneCPDataSource();\r\n\r\n        dataSource.setDriverClass(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));\r\n        dataSource.setJdbcUrl(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));\r\n        dataSource.setUsername(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));\r\n        dataSource.setPassword(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));\r\n\r\n        return dataSource;\r\n    }\r\n\r\n    @Bean\r\n    public JpaTransactionManager transactionManager() throws ClassNotFoundException {\r\n        JpaTransactionManager transactionManager = new JpaTransactionManager();\r\n\r\n        transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());\r\n\r\n        return transactionManager;\r\n    }\r\n\r\n    @Bean\r\n    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() throws ClassNotFoundException {\r\n        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();\r\n\r\n        entityManagerFactoryBean.setDataSource(dataSource());\r\n        entityManagerFactoryBean.setPackagesToScan(\r\nenvironment.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));\r\n        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);\r\n\r\n        Properties jpaProterties = new Properties();\r\n        jpaProterties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));\r\n        jpaProterties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));\r\n        jpaProterties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));\r\n        jpaProterties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));\r\n\r\n        entityManagerFactoryBean.setJpaProperties(jpaProterties);\r\n\r\n        return entityManagerFactoryBean;\r\n    }\r\n\r\n    @Bean\r\n    public MessageSource messageSource() {\r\n        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();\r\n\r\n        messageSource.setBasename(\r\nenvironment.getRequiredProperty(PROPERTY_NAME_MESSAGESOURCE_BASENAME));\r\n        messageSource.setUseCodeAsDefaultMessage(\r\nBoolean.parseBoolean(\r\nenvironment.getRequiredProperty(PROPERTY_NAME_MESSAGESOURCE_USE_CODE_AS_DEFAULT_MESSAGE)));\r\n\r\n        return messageSource;\r\n    }\r\n\r\n    @Bean\r\n    public ViewResolver viewResolver() {\r\n        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();\r\n\r\n        viewResolver.setViewClass(JstlView.class);\r\n        viewResolver.setPrefix(VIEW_RESOLVER_PREFIX);\r\n        viewResolver.setSuffix(VIEW_RESOLVER_SUFFIX);\r\n\r\n        return viewResolver;\r\n    }\r\n}<\/pre>\n<p>My web application initializer looks like this:<\/p>\n<pre class=\"brush:java\">import org.springframework.web.WebApplicationInitializer;\r\nimport org.springframework.web.context.ContextLoaderListener;\r\nimport org.springframework.web.context.support.AnnotationConfigWebApplicationContext;\r\nimport org.springframework.web.servlet.DispatcherServlet;\r\n\r\nimport javax.servlet.*;\r\n\r\n\/**\r\n * Web application Java configuration class. The usage of web application\r\n * initializer requires Spring Framework 3.1 and Servlet 3.0.\r\n * @author Petri Kainulainen\r\n *\/\r\npublic class DataJPAExampleInitializer implements WebApplicationInitializer {\r\n   \r\n    private static final String DISPATCHER_SERVLET_NAME = \"dispatcher\";\r\n    private static final String DISPATCHER_SERVLET_MAPPING = \"\/\";\r\n   \r\n    @Override\r\n    public void onStartup(ServletContext servletContext) throws ServletException {\r\n        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();\r\n        rootContext.register(ApplicationContext.class);\r\n\r\n        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(DISPATCHER_SERVLET_NAME, new DispatcherServlet(rootContext));\r\n        dispatcher.setLoadOnStartup(1);\r\n        dispatcher.addMapping(DISPATCHER_SERVLET_MAPPING);\r\n\r\n        servletContext.addListener(new ContextLoaderListener(rootContext));\r\n    }\r\n}<\/pre>\n<p>You might have noticed that I used the <a href=\"http:\/\/static.springsource.org\/spring\/docs\/3.1.x\/javadoc-api\/org\/springframework\/context\/annotation\/PropertySource.html\" target=\"_blank\">@PropertySource annotation<\/a> to specify the location of a properties file which contains the values of used configuration parameters. The content of my <em>application.properties<\/em> file is following:<\/p>\n<pre class=\"brush:bash\"># The default database is H2 memory database but I have also\r\n# added configuration needed to use either MySQL and PostgreSQL.\r\n\r\n#Database Configuration\r\ndb.driver=org.h2.Driver\r\n#db.driver=com.mysql.jdbc.Driver\r\n#db.driver=org.postgresql.Driver\r\ndb.url=jdbc:h2:mem:datajpa\r\n#db.url=jdbc:mysql:\/\/localhost:3306\/datajpa\r\n#db.url=jdbc:postgresql:\/\/localhost\/datajpa\r\ndb.username=sa\r\ndb.password=\r\n\r\n#Hibernate Configuration\r\nhibernate.dialect=org.hibernate.dialect.H2Dialect\r\n#hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect\r\n#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\r\nhibernate.format_sql=true\r\nhibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy\r\nhibernate.show_sql=true\r\n\r\n#MessageSource\r\nmessage.source.basename=i18n\/messages\r\nmessage.source.use.code.as.default.message=true\r\n\r\n#EntityManager\r\n#Declares the base package of the entity classes\r\nentitymanager.packages.to.scan=net.petrikainulainen.spring.datajpa.model<\/pre>\n<h2>Configuring Spring Data JPA<\/h2>\n<p>Third, you must configure the Spring Data JPA. If you were paying attention, you might have noticed that I used the <a href=\"http:\/\/static.springsource.org\/spring\/docs\/3.1.x\/javadoc-api\/org\/springframework\/context\/annotation\/ImportResource.html\" target=\"_blank\">@ImportResource annotation<\/a> in my application context configuration class to import additional configuration from a XML configuration file. At the moment Spring Data JPA does not support Java configuration. Thus, the only way to configure it is to use a XML configuration file. My a<em>pplicationContext.xml<\/em> file looks following:<\/p>\n<pre class=\"brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\r\n      xmlns:jpa=\"http:\/\/www.springframework.org\/schema\/data\/jpa\"\r\n      xmlns:mvc=\"http:\/\/www.springframework.org\/schema\/mvc\"\r\n      xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n      xsi:schemaLocation=\"\r\n       http:\/\/www.springframework.org\/schema\/beans\r\n       http:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.1.xsd\r\n       http:\/\/www.springframework.org\/schema\/data\/jpa\r\n   http:\/\/www.springframework.org\/schema\/data\/jpa\/spring-jpa-1.0.xsd\r\n       http:\/\/www.springframework.org\/schema\/mvc\r\n       http:\/\/www.springframework.org\/schema\/mvc\/spring-mvc-3.1.xsd\"&gt;\r\n    &lt;!--\r\n       Configures the location of static resources such as css files.\r\n       Requires Spring Framework 3.0 or higher.\r\n   --&gt;\r\n    &lt;mvc:resources mapping=\"\/static\/**\" location=\"\/static\/\"\/&gt;\r\n\r\n    &lt;!--\r\n       Ensures that dispatcher servlet can be mapped to '\/' and static resources\r\n       are still served by the containers default servlet. Requires Spring Framework\r\n       3.0 or higher.\r\n   --&gt;\r\n    &lt;mvc:default-servlet-handler\/&gt;\r\n\r\n    &lt;!--\r\n       Configures Spring Data JPA and sets the base package of my DAOs.\r\n   --&gt;\r\n    &lt;jpa:repositories base-package=\"net.petrikainulainen.spring.datajpa.repository\"\/&gt;\r\n&lt;\/beans&gt;<\/pre>\n<h2>You Are Done<\/h2>\n<p>That is it. I have now demonstrated to you how you can configure the Spring Data JPA. I also have created an example application to demonstrate that this configuration is actually working. You can test the configuration yourself by <a href=\"https:\/\/github.com\/pkainulainen\/spring-data-jpa-examples\/tree\/master\/tutorial-part-one\" target=\"_blank\">getting my example application from Github<\/a> and running the example web application by using the Maven Jetty plugin (<strong>Note<\/strong>: Remember to create the <em>model<\/em> and <em>repository<\/em> packages first. <a href=\"http:\/\/stackoverflow.com\/questions\/115983\/how-do-i-add-an-empty-directory-to-a-git-repository\" target=\"_blank\">Since it is not possible to add empty directories to the Git staging area<\/a>, the Github repository does not have them either).<\/p>\n<p>The <a href=\"http:\/\/www.petrikainulainen.net\/programming\/spring-framework\/spring-data-jpa-tutorial-part-two-crud\/\">second part of my Spring Data JPA tutorial<\/a> describes how you can create a simple CRUD web application by using Spring Data JPA. Stay tuned.<br \/>\n&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/www.petrikainulainen.net\/programming\/spring-framework\/spring-data-jpa-tutorial-part-one-configuration\/\">Spring Data JPA Tutorial Part One: Configuration<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Petri Kainulainen at the <a href=\"http:\/\/www.petrikainulainen.net\/\">Petri Kainulainen<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate with a database. I have been using it for a while at my work and in my personal hobby projects and it has indeed make things a lot &hellip;<\/p>\n","protected":false},"author":429,"featured_media":238,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[33,30,321],"class_list":["post-15272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jpa","tag-spring","tag-spring-data"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Data JPA Tutorial Part One: Configuration<\/title>\n<meta name=\"description\" content=\"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Data JPA Tutorial Part One: Configuration\" \/>\n<meta property=\"og:description\" content=\"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2013-07-15T16:00:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Petri Kainulainen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/petrikainulaine\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Petri Kainulainen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html\"},\"author\":{\"name\":\"Petri Kainulainen\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5af4df3fdfeb79e9fa3598d79bff2c9e\"},\"headline\":\"Spring Data JPA Tutorial Part One: Configuration\",\"datePublished\":\"2013-07-15T16:00:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html\"},\"wordCount\":635,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"keywords\":[\"JPA\",\"Spring\",\"Spring Data\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html\",\"name\":\"Spring Data JPA Tutorial Part One: Configuration\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"datePublished\":\"2013-07-15T16:00:33+00:00\",\"description\":\"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/spring-data-jpa-tutorial-part-one-configuration.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Data JPA Tutorial Part One: Configuration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5af4df3fdfeb79e9fa3598d79bff2c9e\",\"name\":\"Petri Kainulainen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g\",\"caption\":\"Petri Kainulainen\"},\"description\":\"Petri is passionate about software development and continuous improvement. He is specialized in software development with the Spring Framework and is the author of Spring Data book.\",\"sameAs\":[\"http:\\\/\\\/www.petrikainulainen.net\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/in\\\/petrikainulainen\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/petrikainulaine\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/petri-kainulainen\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Data JPA Tutorial Part One: Configuration","description":"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html","og_locale":"en_US","og_type":"article","og_title":"Spring Data JPA Tutorial Part One: Configuration","og_description":"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate","og_url":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-07-15T16:00:33+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","type":"image\/jpeg"}],"author":"Petri Kainulainen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/petrikainulaine","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Petri Kainulainen","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html"},"author":{"name":"Petri Kainulainen","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5af4df3fdfeb79e9fa3598d79bff2c9e"},"headline":"Spring Data JPA Tutorial Part One: Configuration","datePublished":"2013-07-15T16:00:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html"},"wordCount":635,"commentCount":4,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","keywords":["JPA","Spring","Spring Data"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html","url":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html","name":"Spring Data JPA Tutorial Part One: Configuration","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","datePublished":"2013-07-15T16:00:33+00:00","description":"Spring Data JPA is a project which aims both to simplify the creation of JPA based repositories and to reduce the amount of code needed to communicate","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/spring-data-jpa-tutorial-part-one-configuration.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Data JPA Tutorial Part One: Configuration"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5af4df3fdfeb79e9fa3598d79bff2c9e","name":"Petri Kainulainen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9e57425180f323fa65bc519a64c8273d3fcb7c6bd272e56b37dd15613f403659?s=96&d=mm&r=g","caption":"Petri Kainulainen"},"description":"Petri is passionate about software development and continuous improvement. He is specialized in software development with the Spring Framework and is the author of Spring Data book.","sameAs":["http:\/\/www.petrikainulainen.net\/","http:\/\/www.linkedin.com\/in\/petrikainulainen","https:\/\/x.com\/https:\/\/twitter.com\/petrikainulaine"],"url":"https:\/\/www.javacodegeeks.com\/author\/petri-kainulainen"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/15272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/429"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=15272"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/15272\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/238"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=15272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=15272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=15272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}