<faqs title="よくある質問" toplink="true">
	<part id="general">
		<title>一般的な質問</title>
		<faq id="general-1">
			<question>Domaとは何ですか？</question>
			<answer>
				<p>
					<a href="http://s2dao.seasar.org/ja/index.html">S2Dao</a>のスタイル（DAOパターンや2 Way SQL）を踏襲したJava6（JDBC4.0）対応のO/Rマッパーです。
					主な特長は2つあります。
					<ol>
						<li>apt(アプト)を使用して、コンパイル時にコードの生成やコードの検証を行います。これにより、プログラミングミスを早期に発見できます。</li>
						<li>データベース上のカラムの値をドメインクラスと呼ばれるJavaオブジェクトにマッピングできます。これにより、型を活かしたプログラミングが容易になります。</li>
					</ol>
				</p>
			</answer>
		</faq>
		<faq id="general-2">
			<question>Domaとはどのような意味ですか？</question>
			<answer>
				<p>
					<b>D</b>omain <b>O</b>riented <b>MA</b>pping Framework の略です。
				</p>
			</answer>
		</faq>
		<faq id="general-3">
			<question>Domain（ドメイン）とは何ですか？</question>
			<answer>
				<p>
					値のとり得る範囲（定義域）のことです。
					Domaでは、テーブルのカラムの値を、ドメインと呼ばれるJavaオブジェクトで扱えます。
				</p>
				<p>
					たとえば、一般的なO/Rマッパーでは、データベースのVARCHAR型をJavaのStringにマッピングしますが、
					Domaでは、アプリケーション固有の型にマッピングすることを推奨しています。
					なぜならば、データベース上では同じVARHCAR型でも、従業員名を表すVARCHAR型と電話番号を表すVARCHAR型は、
					異なるJavaの型で扱うべきと考えるからです。
					このアプリケーション固有の型をドメインと呼びます。
				</p>
			</answer>
		</faq>
		<faq id="general-4">
			<question>Domain（ドメイン）を利用する利点は何ですか？</question>
			<answer>
				<p>
					主要な利点は次のものです。
					<ol>
					<li>データベース上のカラムの型が同じあってもアプリケーション上意味が異なるものを別のJavaの型で表現できます。</li>
					<li>概念をクラスとして明確に表現することでプログラミングをわかりやすくできます。</li>
					<li>値と振る舞いを同じクラスで表現できます。</li>
					</ol>
				</p>
			</answer>
		</faq>
		<faq id="general-5">
			<question>apt（アプト）とは何ですか？</question>
			<answer>
				<p>
					<a href="http://java.sun.com/javase/6/docs/technotes/guides/apt/index.html">Annotation Processing Tool</a>の略です。
					狭義では、Java 5 で導入された Mirror API を指しますが、広義では、Java 6 で導入された 
					<a href="http://jcp.org/en/jsr/detail?id=269">Pluggable Annotation Processing API (JSR 269)</a>
					を含みます。
				</p>
				<p>
					aptを利用すると、コンパイル時のソースコード検証や、ソースコード生成が可能です。
				</p>
				<p>
					Domaでは、Pluggable Annotation Processing APIを使用して、
					Daoのインタフェースから実装クラスを生成しています。
					また、SQLファイルの存在チェックや、メソッド定義が規約に合致しているかどうかの検証も行っています。
				</p>
			</answer>
		</faq>
	</part>
	<part id="runtime-environment">
		<title>動作環境に関する質問</title>
		<faq id="runtime-environment-1">
			<question>どのバージョンのJREをサポートしていますか？</question>
			<answer>
				<p>
					JRE 6 以上をサポートしています。JRE 5 以前はサポートしていません。
				</p>
			</answer>
		</faq>
		<faq id="runtime-environment-2">
			<question>Domaを動作させるのにSeasar2は必須ですか？</question>
			<answer>
				<p>
					いいえ、必須ではありません。
				</p>
			</answer>
		</faq>
		<faq id="runtime-environment-3">
			<question>Domaを動作させるのに必要なライブラリには何がありますか？</question>
			<answer>
				<p>
					Domaはどのライブラリにも依存していません。単独で動作します。
				</p>
			</answer>
		</faq>
	</part>
	<part id="development-environment">
		<title>開発環境に関する質問</title>
		<faq id="development-environment-1">
			<question>どのバージョンのJDKをサポートしていますか？</question>
			<answer>
				<p>
					JDK 6 以上をサポートしています。JDK 5 以前はサポートしていません。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-2">
			<question>お奨めのIDE（統合開発環境）はありますか？</question>
			<answer>
				<p>
					Eclipseをお奨めします。Eclipseのバージョンは 3.5 以上でなければいけません。
				</p>
				<p>
					Eclipse 3.5 は JDK 6 で動作させる必要があります。
					また、プロジェクトでも JDK 6 を使用する必要があります。
				</p>
				<p>
					詳しくは<a href="setup.html">セットアップ</a>を参照してください。
				</p>
				<p>
					実績は聞きませんが、IntelliJ IDEAでも動作します。
					<a href="http://d.hatena.ne.jp/taedium/20121229/p1">DomaをIntelliJ IDEAで動かす</a>を参照ください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-3">
			<question>開発を支援するツールはありますか？</question>
			<answer>
				<p>
					はい。Eclipseプラグインとコード生成ツールを用意しています。
				</p>
				<p>
					詳しくは<a href="extension/index.html">開発支援ツール</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-4">
			<question>DomaのjarファイルをEclipseのビルドパスに指定しましたが、アノテーション処理が行われません。何が足りないのでしょうか？</question>
			<answer>
				<p>
					Factory PathにもDomaのjarファイルを登録してください。
				<p>
				</p>
					Factory Pathの設定画面は、プロジェクトのプロパティ設定画面から、
					Java - Compiler - Annotation Processing - Factory Path と辿れます。
					Annotation ProcessingとFactory Pathの画面では、
					「Enable project specific settings」のチェックボックスをチェックしてください。
				</p>
				<p>
					詳しくは<a href="setup.html">セットアップ</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-5">
			<question>SQLファイルが存在するにもかかわらず、「[DOMA4019] SQLファイル[META-INF/../select.sql]がクラスパスから見つかりませんでした」というエラーメッセージが表示されます。何がいけないのでしょうか？</question>
			<answer>
				<p>
					SQLファイルは、aptにより生成されるクラスの出力ディレクトリから検索されます。
					SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリが同じであることを確認してください。
				<p>
				</p>
					Eclipseの場合、プロジェクトのプロパティの「Java Build Path」の設定画面で、
					ソースフォルダごとに出力先ディレクトリを変更可能になっています。
					この設定を無効にするか、SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリを合わせてください。
				</p>
				<p>
					Eclipseのプラグインm2e(m2eclipse)を使用する場合、出力先ディレクトリの変更が必要な場合があります。
					設定方法は<a href="http://d.hatena.ne.jp/taedium/20130820/p1">m2eでDomaを使う場合に気をつけること</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-6">
			<question>aptで生成されたコードはどこに出力されますか？</question>
			<answer>
				<p>
					Eclipseを利用している場合、デフォルトではプロジェクト直下の「.apt_generated」ディレクトリに出力されます。
				<p>
				</p>
					出力先を変更したい場合は、<a href="setup.html#注釈処理の設定">注釈処理の設定</a>を参考にしてください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-7">
			<question>Eclipseを使用していますが、「.apt_generated」ディレクトリが見つかりません。どうしてですか？</question>
			<answer>
				<p>
					aptの設定が正しく行われていない可能性があります。
					<a href="setup.html">セットアップ</a>を見直してください。
				<p>
				</p>
					もしくは、単にPackage Explorerビュー上に「.apt_generated」ディレクトリが表示されていないだけかもしれません。
					「.apt_generated」は、名称が「.」で始まっているために、Package Explorerビューで表示対象外になります。
					対応方法としては以下のいずれかを選択してください。
				</p>
				<ul>
					<li>Package Explorerビューではなく、Nivigatorビューから「.apt_generated」ディレクトリを確認する</li>
					<li>Package Explorerビューのフィルタリングの設定を変更し、「.apt_generated」ディレクトリを表示させる</li>
					<li>出力先ディレクトリを明示的に指定し、名称が「.」で始まらないようにする</li>
				</ul>
				<p>
					出力先を変更したい場合は、<a href="setup.html#注釈処理の設定">注釈処理の設定</a>を参考にしてください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-8">
			<question>EclipseプラグインのDoltengを使って、Seasar2とDomaを組み合わせたプロジェクトの雛形を作成できますか？</question>
			<answer>
				<p>
					いいえ、できません。
					また、<a href="http://dolteng.sandbox.seasar.org/">Dolteng</a>への対応は現在のところ予定されていません。
				</p>
				<p>
					Seasar2とDomaを組み合わせたプロジェクトの雛形には、<a href="jpetstore.html">Doma JPetStore</a>をお使いください。
				</p>
			</answer>
		</faq>
		<faq id="development-environment-9">
			<question>EclipseからAntを使ってDoma-Genのタスクを実行すると処理が止まってしまいます。なぜですか？</question>
			<answer>
				<p>
					Windows版のEclipse3.5上のAntには、日本語をコンソールに出力できないという問題があります。
					日本語を出力するタスクを実行すると処理が途中で止まってしまいます。
				</p>
				<p>
					Antはコマンドラインから実行するか、もしくはEclipse3.6以上をお使いください。
				</p>
			</answer>
		</faq>
	</part>
	<part id="build-environment">
		<title>ビルド環境に関する質問</title>
		<faq id="build-environment-1">
			<question>AntでDomaを利用したアプリケーションをビルドしたいのですが、aptに関する設定をどのように行えばいいのでしょうか？</question>
			<answer>
				<p>
					<a href="reference/app_build.html">アプリケーションのビルド方法</a>や<a href="reference/apt.html">注釈処理</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="build-environment-2">
			<question>MavenでDomaを利用したアプリケーションをビルドしたいのですが、aptに関する設定をどのように行えばいいのでしょうか？</question>
			<answer>
				<p>
					<a href="reference/app_build.html">アプリケーションのビルド方法</a>や<a href="reference/apt.html">注釈処理</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="build-environment-3">
			<question>GradleでDomaを利用したアプリケーションをビルドしたいのですが、aptに関する設定をどのように行えばいいのでしょうか？</question>
			<answer>
				<p>
					<a href="reference/app_build.html">アプリケーションのビルド方法</a>や<a href="reference/apt.html">注釈処理</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="build-environment-4">
			<question>Domaを利用したアプリケーションをAntやMavenやGradleでコンパイルするとエラーになります。何がいけないのでしょうか？</question>
			<answer>
				<p>
					javacには、aptに関するバグがあります。
					コンパイルが成功しているにもかかわらず、誤ったエラーメッセージが出力されている可能性があります。
				</p>
				<p>
					詳しくは<a href="reference/app_build.html">アプリケーションのビルド方法</a>を参照してください。
				</p>
			</answer>
		</faq>
	</part>
	<part id="feature">
		<title>O/Rマッパーの機能に関する質問</title>
		<faq id="feature-1">
			<question>どのRDBMSをサポートしていますか？</question>
			<answer>
				<p>
					次のRDBMSに対応しています。
				</p>
				<ul>
					<li>DB2 V9.5 for Linux, UNIX and Windows以上</li>
					<li>H2 Database Engine 1.2以上</li>
					<li>HSQLDB 1.8.0.1以上</li>
					<li>Microsoft SQL Server 2008以上</li>
					<li>MySQL 5.0以上</li>
					<li>Oracle Database 10g以上</li>
					<li>PostgreSQL 8.0以上</li>
					<li>SQLite 3以上</li>
				</ul>
				<p>
					要望があれば他のRDBMSへの対応も検討します。
					また、利用者が独自に対応モジュール(org.seasar.doma.jdbc.dialect.Dialectの実装クラス)を作成することも可能です。
				</p>
			</answer>
		</faq>
		<faq id="feature-2">
			<question>SQLを自動生成する機能はありますか？</question>
			<answer>
				<p>
					はい。更新系SQL、ストアドプロシージャー/ファンクション呼び出しについてはSQLを自動で生成できます。
					検索系のSQLについては、自動生成機能はありませんが、ファイルに外部化したSQLを実行し、その結果をJavaのオブジェクトにマッピングする機能があります。
					更新系のSQLについても、必要であれば、ファイルに外部化したSQLを利用できます。
				</p>
				<p>
					詳しくは<a href="reference/dao.html#クエリ定義">クエリ定義</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-3">
			<question>条件が動的に変わるSQLはどのように実行できますか？</question>
			<answer>
				<p>
					SQLファイルに、SQLコメントを使って条件を指定できます。
					SQLコメントは実行時に解析され、条件によって異なるSQLが生成されます。
				</p>
				<p>
					SQLコメントについては<a href="reference/sqlfile.html">SQLファイル</a>を参照してください。
				</p>
				<p>
					SQLコメントの機能だけで条件を指定することが困難な場合には、SQLビルダを利用してプログラム上でSQLを組み立てられます。
				</p>
				<p>
					SQLビルダについては<a href="http://doma.seasar.org/reference/dao.html#ビルダを利用したSQLの組み立て">ビルダを利用したSQLの組み立て</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-4">
			<question>プログラミングで問い合わせ条件を組み立てるためのクライテリアAPIはありますか？</question>
			<answer>
				<p>
					いいえ、ありません。
					しかし、動的なSQLは、SQLコメントを使って条件指定できます。
					また、外部化されたオリジナルのSQLをページング用のSQLや悲観的ロック用のSQLに変換する機能があります。
				</p>
			</answer>
		</faq>
		<faq id="feature-5">
			<question>バッチ更新はサポートしていますか？</question>
			<answer>
				<p>
					はい、サポートしています。
				</p>
				<p>
					詳しくは
					<a href="reference/query/batch_insert.html">バッチ挿入</a>、
					<a href="reference/query/batch_update.html">バッチ更新</a>、
					<a href="reference/query/batch_delete.html">バッチ削除</a>
					等を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-6">
			<question>楽観的排他制御はサポートしていますか？</question>
			<answer>
				<p>
					はい、バージョン番号による楽観的排他制御をサポートしています。
				</p>
				<p>
					詳しくは<a href="reference/query/update.html">更新</a>、
					<a href="reference/query/delete.html">削除</a>、
					<a href="reference/query/batch_update.html">バッチ更新</a>、
					<a href="reference/query/batch_delete.html">バッチ削除</a>
					等を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-7">
			<question>悲観的排他制御はサポートしていますか？</question>
			<answer>
				<p>
					はい、ファイルに外部化したオリジナルのSQLを悲観的排他制御用SQLに変換できます。
					ただし、RDBMSが悲観的排他制御に対応している必要があります。
				</p>
				<p>
					詳しくは<a href="reference/query/select.html#悲観的排他制御">悲観的排他制御</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-8">
			<question>ページングはサポートしていますか？</question>
			<answer>
				<p>
					はい、ファイルに外部化したオリジナルのSQLをページング用SQLに変換できます。
				</p>
				<p>
					詳しくは<a href="reference/query/select.html#ページング">ページング</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-9">
			<question>主キーの自動生成はサポートしていますか？</question>
			<answer>
				<p>
					はい。データベースのIDENTITY、シーケンス、テーブルを利用した自動生成がサポートされています。
				</p>
				<p>
					詳しくは<a href="reference/entity.html#フィールド定義">フィールド定義</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-10">
			<question>複合主キーはサポートしていますか？</question>
			<answer>
				<p>
					はい、サポートしています。
				</p>
				<p>
					詳しくは<a href="reference/entity.html#フィールド定義">フィールド定義</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-11">
			<question>1対1 や 1対n などデータベース上のリレーションシップをJavaオブジェクトにマッピングできますか？</question>
			<answer>
				<p>
					いいえ、できません。
					Domaでは、SQLの結果セット1行をそのまま1つのエンティティのインスタンスにマッピングします。
					このほうがシンプルでわかりやすいと考えているためです。
				</p>
			</answer>
		</faq>
		<faq id="feature-12">
			<question>遅延ローディングをサポートしていますか？</question>
			<answer>
				<p>
					いいえ、サポートしていません。
					遅延ローディングによりSQLの発行のタイミングが予測しづらくなり、トラブルの元になりやすいと考えているためです。
				</p>
			</answer>
		</faq>
		<faq id="feature-13">
			<question>ストアドプロシージャーやストアドファンクションをサポートしていますか？</question>
			<answer>
				<p>
					はい、サポートしています。
				</p>
				<p>
					詳しくは<a href="reference/query/procedure.html">ストアドプロシージャー</a>および<a href="reference/query/function.html">ストアドファンクション</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-14">
			<question>データベースから取得した結果をキャッシュする機能はありますか？</question>
			<answer>
				<p>
					いいえ、ありません。
					キャッシュはDomaが位置づけられるデータアクセス層よりも上位の層で行ったほうがわかりやすいと考えているからです。
				</p>
			</answer>
		</faq>
		<faq id="feature-15">
			<question>コネクションプーリングの機能はありますか？</question>
			<answer>
				<p>
					いいえ、Domaでは提供していません。
					コネクションプーリング機能をもつアプリケーションサーバー、フレームワーク、ライブラリ等と組み合わせて使用してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-16">
			<question>トランザクションを制御する機能はありますか？</question>
			<answer>
				<p>
					はい、ローカルトランザクションをサポートしています。
				</p>
				<p>
					詳しくは<a href="reference/transaction.html">トランザクション</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-17">
			<question>ジェネリックDAOを使用できますか？</question>
			<answer>
				<p>
					いいえ、使用できません。
					ジェネリックDAOを使用するとコード量は減りますが、コードの見通しがかえって低下すると考えているため使用できないようにしています。
					（ジェネリックDAOについては<a href="http://www.ibm.com/developerworks/jp/java/library/j-genericdao/">DAOを繰り返すな！</a>を参照ください。）
				</p>
				<p>
					たとえば、ジェネリックDAOでは、特定のエンティティをパラメータとしてメソッドを呼び出している箇所を探すのが容易ではありません。
					ジェネリックDAOでなければメソッドのシグネチャが固定であるためIDEのCall Hierarchy機能を使って簡単に特定可能ですが、
					ジェネリックDAOの場合、メソッドのパラメータの型がジェネリクス型であるためにCall Hierarchy機能を使っても呼び出し元を絞り込めません。
				</p>
			</answer>
		</faq>
		<faq id="feature-18">
			<question>DomaをS2JDBCやS2Daoといっしょに使用できますか？</question>
			<answer>
				<p>
					可能ですが、推奨しません。
					同じような設定を重複して用意しなければならず、仕様が似ているようで異なるため混乱の元になります。
				</p>
				<p>
					Domaと他のデータアクセスのライブラリを組み合わせるのであれば、JDBCを薄くラップしたライブラリをお奨めします。
					たとえば、次のものが挙げられます。
				</p>
				<ul>
					<li>Seasar2を使用するのであれば、<a href="http://s2container.seasar.org/2.4/ja/s2jdbc_base.html">S2JDBCのベース部分</a></li>
					<li>Spring Frameworkを使用するのであれば、<a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html">Spring Framework JDBC</a></li>
					<li><a href="http://commons.apache.org/dbutils/">Commons DbUtils</a></li>
				</ul>
				<p>
					これらのライブラリは、プログラム上で動的にSQLを組み立て実行したい場合に使用するといいでしょう。
					その場合、SQLの組み立てと実行は<a href="reference/dao.html#デリゲート定義">デリゲート定義</a>で指定したデリゲート先で行うことを推奨します。
				</p>
				<p>
					単にSQLをプログラムで組み立てることが目的であれば、Domaが提供するSQLビルダを利用できます。
					SQLビルダについては<a href="http://doma.seasar.org/reference/dao.html#ビルダを利用したSQLの組み立て">ビルダを利用したSQLの組み立て</a>を参照してください。
				</p>
			</answer>
		</faq>
		<faq id="feature-19">
			<question>JDBCドライバはどのように設定しますか？</question>
			<answer>
				<p>
					<a href="reference/config.html#JDBCドライバの設定">JDBCドライバの設定</a>を参照してください。
				</p>
			</answer>
		</faq>
	</part>
</faqs>
