Java EE では、JPA を使用してクラスを永続化する場合、persistance.xml ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="JMonks_Crud">
<jta-data-source>jdbc/example</jta-data-source>
<class>models.Class1</class>
<class>models.Class2</class>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
</properties>
</persistence-unit>
</persistence>
JPAでこれまでに経験した唯一の経験は、データベース内のすべての値をクリアすることになっている例からのものであり、いくつかの値を使用済みにハードコードするサーブレットのpostメソッドがあります。これを実現するために、この例では次を使用します。
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
ただし、セッション間でデータベースにデータを保持したい (優れた動的サイトのように) のですが、これを実現するために value 属性に何を入力すればよいかわかりません。wikia サイト (http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Extensions_for_Schema_Generation) は、これらがこの値に配置できる 3 つの異なる値であると述べています。
- none - EclipseLink は DDL を生成しません。スキーマは生成されません。
- create-tables - EclipseLink は、テーブルごとに CREATE TABLE SQL を実行しようとします。テーブルがすでに存在する場合、EclipseLink は特定のデータベースと JDBC ドライバーの組み合わせのデフォルトの動作に従います (既存のテーブルに対して CREATE TABLE SQL が発行された場合)。ほとんどの場合、例外がスローされ、テーブルは作成されません。その後、EclipseLink は次のステートメントを続行します。(eclipselink.create-ddl-jdbc-file-nameも参照してください。)
- drop-and-create-tables – EclipseLink は、すべてのテーブルを削除してから、すべてのテーブルを作成しようとします。問題が発生した場合、EclipseLink は特定のデータベースと JDBC ドライバーの組み合わせのデフォルトの動作に従い、次のステートメントに進みます。(eclipselink.create-ddl-jdbc-file-nameおよびeclipselink.drop-ddl-jdbc-file-nameも参照してください。)
none 属性を使用すると、データが入力された既存のテーブルが取得されますか? または、誰もテーブルをまったく作成せず、役に立たないでしょうか? create-tables を使用すると、例外がスローされませんか? 使用しようとしているテーブルが既に存在するためです。
御時間ありがとうございます :)