LoginSignup
0
0

More than 5 years have passed since last update.

RESTEasyとJPAとAngularJSを使ってWebアプリを作ってみる3(persistance.xmlの設定)

Last updated at Posted at 2015-12-29

persistance.xml の編集

  • homework - src/main/java - META-INF にある persistence.xml をダブルクリックします。
  • 「一般」タブの「永続化プロバイダー」に wildfly を使用するので、org.hibernate.jpa.HibernatePersistenceProvider を入力します。
  • 「接続」タブで、とりあえずコンテナなしでも確認できるように、「トランザクション・タイプ」は「リソース・ローカル」を選択します。
  • 「JDBC接続プロパティー」は「接続から取り込み」リンクをクリックして、homework を選択して「OK」ボタンをクリックします。
  • 「プロパティー」タブでは、JPAのログを表示するためにキーに hibernate.show_sql, hibernate.format_sql を追加し、値はどちらも true を設定します。(検索にヒットするのは EclipseLink での設定が多かった…)
  • JDBCレベルのログを出力させたいので、javax.persistence.jdbc.url は jdbc:mysql://localhost:3306/homework から jdbc:log4jdbc:mysql://localhost:3306/homework に、javax.persistence.jdbc.driver は com.mysql.jdbc.Driver から net.sf.log4jdbc.sql.jdbcapi.DriverSpy に変更します。

JPQLの外部ファイル化

各種エンティティに @NamedQuery で JPQL を記述すると、再作成したときに消えてしまうし、一カ所で管理したかったので、外部ファイルに記述するようにします。

  • src/main/resources で右クリック-「新規」-「ファイル」を選択します。
  • ファイル名に homework.xml と入力して「完了」ボタンをクリックします。

以下のようなフォーマットで named-query を必要な分だけ追加していきます。

homework.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1"
        xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">
    <named-query name="呼び出すときの名前">
        <query><![CDATA[
        SELECT
            u
        FROM
            User u
        WHERE
            u.accountId = :accountId
        AND
            u.password = :password
        ]]></query>
    </named-query>
</entity-mappings>

外部ファイルの指定

mapping-file タグで homework.xml を指定します。

単体テスト用の設定を追記

データベースを本番用と単体テスト用とに分けたいので、persistence-unit を丸ごとコピペして name 属性と、接続URLを変更します。

現時点での最終的なファイルの内容は以下のようになります。
(本番用はJTAの指定に切り替える予定)

persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="homework" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <mapping-file>homework.xml</mapping-file>
        <class>homework.entity.Answer</class>
        <class>homework.entity.History</class>
        <class>homework.entity.Question</class>
        <class>homework.entity.Subject</class>
        <class>homework.entity.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:log4jdbc:mysql://localhost:3306/homework"/>
            <property name="javax.persistence.jdbc.user" value="db_user"/>
            <property name="javax.persistence.jdbc.password" value="db_pass"/>
            <property name="javax.persistence.jdbc.driver" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
    <persistence-unit name="homework_ut" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <mapping-file>homework.xml</mapping-file>
        <class>homework.entity.Answer</class>
        <class>homework.entity.History</class>
        <class>homework.entity.Question</class>
        <class>homework.entity.Subject</class>
        <class>homework.entity.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:log4jdbc:mysql://localhost:3306/homework_ut"/>
            <property name="javax.persistence.jdbc.user" value="db_user"/>
            <property name="javax.persistence.jdbc.password" value="db_pass"/>
            <property name="javax.persistence.jdbc.driver" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

RESTEasyとJPAとAngularJSを使ってWebアプリを作ってみる4(JPAでデータ取得)

0
0
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
0