1概要

これは、Hibernateを永続化プロバイダとして使用して、SpringとJPAを設定する方法を示すチュートリアルです。

Javaベースの設定とプロジェクトのための基本的なMaven pomを使ってSpringコンテキストを設定することについてのステップバイステップの紹介はリンクを見てください:記事]。

  • NEW ** :これはHibernate 4とSpring 4のセットアップに関するビデオです(フル1080pで見ることをお勧めします)。


2 Java

を使用したJPA Springの設定

SpringプロジェクトでJPAを使用するには、**

EntityManager

を設定する必要があります。

これは設定の主要部分です – そしてそれはSpringファクトリビーン – より単純な

LocalEntityManagerFactoryBean

または

より柔軟な

LocalContainerEntityManagerFactoryBean


のどちらかを通して行われます。後者のオプションは、追加のプロパティを設定できるようにここで使用されています。

@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{

   @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
      LocalContainerEntityManagerFactoryBean em
        = new LocalContainerEntityManagerFactoryBean();
      em.setDataSource(dataSource());
      em.setPackagesToScan(new String[]{ "org.baeldung.persistence.model" });

      JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      em.setJpaVendorAdapter(vendorAdapter);
      em.setJpaProperties(additionalProperties());

      return em;
   }

   @Bean
   public DataSource dataSource(){
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://localhost:3306/spring__jpa");
      dataSource.setUsername( "tutorialuser" );
      dataSource.setPassword( "tutorialmy5ql" );
      return dataSource;
   }

   @Bean
   public PlatformTransactionManager transactionManager(
     EntityManagerFactory emf){
       JpaTransactionManager transactionManager = new JpaTransactionManager();
       transactionManager.setEntityManagerFactory(emf);

       return transactionManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
       return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties additionalProperties() {
       Properties properties = new Properties();
       properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
       properties.setProperty(
         "hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

       return properties;
   }
}

また、Spring 3.2より前のバージョンでは、


cglib **

はJava

@ Configuration

クラスが機能するためにクラスパス上になければならなかったことに注意してください。依存関係としての

cglib

の必要性をよりよく理解するためには、リンク:/bootstraping-the-spring-and-java-based-configuration#cglib

gone[Springのcglibアーティファクトに関するこの議論]を参照してください。


3 XMLを使ったJPA Springの設定

XMLと同じSpring構成:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

   <bean id="myEmf"
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="packagesToScan" value="org.baeldung.persistence.model"/>
       <property name="jpaVendorAdapter">
           <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
       </property>
       <property name="jpaProperties">
          <props>
              <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
             <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
          </props>
       </property>
   </bean>

   <bean id="dataSource"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/spring__jpa"/>
       <property name="username" value="tutorialuser"/>
       <property name="password" value="tutorialmy5ql"/>
   </bean>

   <bean id="transactionManager"
     class="org.springframework.orm.jpa.JpaTransactionManager">
       <property name="entityManagerFactory" ref="myEmf"/>
   </bean>
   <tx:annotation-driven/>

   <bean id="persistenceExceptionTranslationPostProcessor" class=
     "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

</beans>

SpringがXMLで設定される方法と新しいJavaベースの設定との間には、比較的小さな違いがあります。XMLでは、別のBeanへの参照は、そのBeanのBeanまたはBeanファクトリーを指すことができます。

ただし、Javaでは型が異なるため、コンパイラはそれを許可していません。そのため、

EntityManagerFactory

が最初にBeanファクトリから取得され、次にトランザクションマネージャに渡されます。


txManager.setEntityManagerFactory(

this.entityManagerFactoryBean()。getObject()

);


4完全なXMLレス


通常、JPAは

META-INF/persistence.xml

ファイルを通して永続化単位を定義します。 ** Spring 3.1以降、

persistence.xml

は不要になりました。

このファイルは削除されるXMLの最後の部分でした – 今、JPAは

no XML

で完全にセットアップできます。


4.1. JPAのプロパティ

JPAプロパティは通常

persistence.xml

ファイルで指定されます。あるいは、プロパティをエンティティマネージャファクトリBeanに直接指定することもできます。


factoryBean.setJpaProperties(this.additionalProperties());

ちなみに、Hibernateが永続化プロバイダになる場合、これがHibernate固有のプロパティを指定する方法になります。


5 Mavenの設定

Spring Coreと永続性の依存関係に加えて – リンクに詳細を表示:/spring-with-maven[Spring with Mavenチュートリアル] – MySQLコネクタと同様に、プロジェクトでJPAとHibernateも定義する必要があります。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>5.2.10.Final</version>
   <scope>runtime</scope>
</dependency>

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>6.0.6</version>
   <scope>runtime</scope>
</dependency>

MySQLの依存関係は参照として含まれていることに注意してください – ドライバはデータソースを設定するために必要ですが、どんなhttp://community.jboss.org/wiki/SupportedDatabases2[Hibernate supported database]でも構いません。


6. JPA in Spring Boot

Spring Bootプロジェクトは、Springアプリケーションの作成をはるかに速く簡単にすることを目的としています。これは、さまざまなSpring機能(JPAなど)のスターターと自動構成を使用して行われます。

Spring BootアプリケーションでJPAを有効にするには、https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22spring-boot-starter%22%20AND%20g%3A%22orgが必要です。 .springframework.boot%22[spring-boot-starter]およびhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22spring-boot-starter-data-jpa%22[spring -boot-starter-data-jpa]依存関係:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>1.5.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>1.5.3.RELEASE</version>
</dependency>


spring-boot-start-start

にはSpring JPAに必要な自動設定が含まれており、

spring-boot-start-start-jpa

プロジェクトは

hibernate-entitymanager

などの必要なすべての依存関係を参照しています。

Spring Bootは

Hibernate

をデフォルトのJPAプロバイダとして設定しているので、カスタマイズしない限り

entityManagerFactory

Beanを定義する必要はなくなりました。

  • Spring Bootは、使用するデータベースに応じて

    dataSource

    beanを自動設定することもできます** 。

    H2



    HSQLDB

    、および

    Apache Derby

    タイプのインメモリデータベースの場合、対応するデータベース依存関係がクラスパスに存在する場合、Bootは自動的に

    DataSource

    を設定します。

たとえば、Spring Boot JPAアプリケーションでインメモリ

H2

データベースを使用する場合は、https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%を追加するだけで済みます。 22h2%22%20AND 20g%3A%22com.h2データベース%22

pom.xml

ファイルへの依存関係:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.195</version>
</dependency>

この方法では、

dataSource

Beanを定義する必要はありませんが、カスタマイズしたい場合は定義できます。


MySQL

データベースでJPAを使用したい場合は、

DataSource

設定を定義するのと同様に、

mysql-connector-java

依存関係が必要です。

これは

@ Configuration

クラスで、または標準のSpring Bootプロパティを使用して実行できます。

Javaの設定は、標準のSpringプロジェクトと同じように見えます。

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUsername("mysqluser");
    dataSource.setPassword("mysqlpass");
    dataSource.setUrl(
      "jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true");

    return dataSource;
}

プロパティファイルを使用してデータソースを設定するには、

spring.datasource

という接頭辞を付けたプロパティを設定する必要があります。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=mysqluser
spring.datasource.password=mysqlpass
spring.datasource.url=
 jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true

Spring Bootはこれらのプロパティに基づいて自動的にデータソースを設定します。

Spring BootでJPAを設定する他の例はhttps://github.com/eugenp/tutorials/tree/master/spring-boot[GitHubプロジェクト]にあります。


7. 結論

このチュートリアルでは、XMLとJavaの両方の設定を使用して、Spring

でHibernateを使用して

JPAを設定する方法を説明しました。

また、通常JPAに関連付けられている最後のXML、つまり__persistence.xmlを削除する方法についても説明しました。最終的な結果は、コンパイル時にSpringにほとんど依存しない、軽量でクリーンなDAO実装です。

いつものように、この記事で紹介されているコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-jpa[Githubでさらに入手]です。これはMavenベースのプロジェクトなので、そのままインポートして実行するのは簡単なはずです。