RESTEasyとJPAとAngularJSを使ってWebアプリを作ってみる３（persistance.xmlの設定）

# 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 を必要な分だけ追加していきます。

```xml: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の指定に切り替える予定）

```xml: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アプリを作ってみる４（JPAでデータ取得）](http://qiita.com/1roh/items/0c71441371f3ba76b3c9)へ