LoginSignup
0
1

More than 5 years have passed since last update.

Spring4、JPA2.1で複数のorm.xmlを定義する方法

Last updated at Posted at 2017-01-24

はじめに

 下記のように複数のorm.xml(user.xml, userImage.xml)を管理する場合の定義方法について記載します。
本稿でのorm.xmlとはentityやnative-sql等のentity-mappingsを定義するファイルを意味します。
検索すると、META-INF/persistence.xml, META-INF/orm.xmlに関する定義方法の情報が多いですが、
これはJPA単体で使う場合の定義ですので、 Spring4と組み合わせて使う場合は異なる定義が必要になります。

パッケージ構成
ーjava
ーresources
     |
     |_conf
     | |_☓☓☓
     | |_☓☓☓
     |
     |_sql
     | |_user.xml
     | |_userImage.xml
     |
     |_applicationContext.xml

前提

今回は下記バージョンで実施します。
spring-data-jpa: 1.10.5.RELEASE
hibernate-entitymanager: 5.1.0.Final

- maven定義

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.5RELEASE</version>
        </dependency>
        <!-- JPA -provider(Hibernate) -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.0.Final</version>
        </dependency>

applicationContext.xml定義

 下記はapplicationContext.xmlの定義例です。全てDB接続のための設定のためdataSource.xml等のファイルを作成し、importする形でも構いません。
 複数orm.xmlの定義方法はpropertyのmappingResourcesを使用します。作成したorm.xml(今回はuser.xml,userImage.xml)のルート以下のパスを定義します。
orm.xmlを増やす場合、下記に追加する必要があります。

余談ですが使用するorm.xmlが一つの場合,META-INFディレクトリ直下にorm.xmlというファイル名を定義すれば
、下記mappingResourceの定義無しで読み込むことが可能です。

定義例
<jpa:repositories base-package="com.sample.orm.dao"/>
<context:property-placeholder
        location="classpath:dataSource.properties"/>
<!-- mysql -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driver.class}"/>
    <property name="url">
        <value>${jdbc.connect}://${jdbc.host.port}/${jdbc.schema}?useUnicode=true&amp;characterEncoding=UTF-8&amp;connectionCollation=utf8mb4_general_ci</value>
    </property>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.pass}"/>
    <property name="maxActive" value="20"/>
    <property name="maxIdle" value="1"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <!-- entityディレクトリ定義 -->
    <property name="packagesToScan" value="com.sample.orm.entity"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="false"/>
            <property name="generateDdl" value="false"/>
            <property name="database" value="MYSQL"/>
        </bean>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
        </props>
    </property>
    <!-- mappingパスを定義 -->
    <property name="mappingResources">
        <list>
            <value>sql/user.xml</value>
            <value>Sql/userImage.xml</value>
        </list>
    </property>
</bean>    

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1