0

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 を使用すると、例外がスローされませんか? 使用しようとしているテーブルが既に存在するためです。

御時間ありがとうございます :)

4

1 に答える 1

0

create-tables を使用する場合、EclipseLink は、デプロイ時にエンティティによって定義されたテーブルを作成します。drop-and-create-tables を使用すると、最初に各エンティティのテーブルを削除してから再作成しようとするため、問題が発生する可能性があります。これにより、アプリを再デプロイするか、アプリケーションを再起動すると、データが失われる可能性があります。これは主に、データベースが起動するたびにテストがデータベースにデータを入力するときの開発およびテスト用です。

EclipseLink 2.4 (ナイトリー ビルド) を使用している場合は、再デプロイ時にエンティティにフィールドを追加する場合に、既存のテーブルで alter table ステートメントを使用する create-or-extend-tables も使用できます。

于 2012-05-28T14:49:58.123 に答える