52

と の 2 つのテーブルがTaありTbます。テーブル構造はまったく同じですが、テーブル名が異なります。

テーブル構造をマッピングするエンティティ クラスを 1 つ作成しようとしています。Ta私の一般的なアプリケーション モジュールの一部は、このエンティティ クラスを使用して、またはTbパラメーターに基づいて動的にクエリおよび更新を行います。JPAでできますか?実行時にエンティティークラスを別のテーブルに動的にマッピングするプログラムを作成するにはどうすればよいですか?

4

3 に答える 3

52

希望どおりに正確に実行できるかどうかはわかりませんが、継承を使用して同じ結果を生成できます。

AbsT にはすべてのフィールドがありますが、@Table アノテーションはありません

Ta と Tb は AbsT を継承し、それぞれ @Table アノテーションを持ちます

使用する

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

AbsTで。

サンプルコード:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class abstract AbsT {
    @Id Long id;
...
}

@Entity
@Table(name = "Ta")
public class Ta extends AbsT {
...
}

@Entity
@Table(name = "Tb")
public class Tb extends AbsT {
...
}
于 2009-06-15T17:12:12.720 に答える
24

アノテーション@MappedSuperclassを使用して抽象クラス(テンプレートクラス)を作成し、それを拡張します。拡張する各クラスは@table、@ entityアノテーションを使用し、空のコンストラクターのみを含みます。すべてのコードは親クラスに含まれます。メソッドでは、パラメーターエンティティがtemplateClassから拡張され、コードを変更する必要がないことを示すジェネリックスを使用します。適切なマッピングは、あなたが通過する各息子にあります。

于 2010-10-14T21:47:39.097 に答える
8

2つの異なる永続性ユニットを使用する場合は、サブクラスを使用せずにこれを行うこともできます。

各永続性ユニットは、一意のマッピングのセット(テーブル名を含む)を指定できます。これを実現する1つの方法は、2つのorm.xmlファイルを作成することです。persistence.xmlでは、次のようなものが必要になります。

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="1.0">

    <persistence-unit name="mapping-1"> 
        . . .
        <mapping-file>orm-1.xml</mapping-file>
        . . .
    </persistence-unit>

    <persistence-unit name="mapping-2"> 
        . . .
        <mapping-file>orm-2.xml</mapping-file>
        . . .
    </persistence-unit>
</persistence>

次に、orm-1.xml内:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
    version="1.0">
    <package>mypackage</package>
    <entity name="myEntity" class="myClass">
        <table name="TABLE1">
            </table>
    </entity>
</entity-mappings>

そしてorm-2.xml内:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
    version="1.0">
    <package>mypackage</package>
    <entity name="myEntity" class="myClass">
        <table name="TABLE2">
            </table>
    </entity>
</entity-mappings>

PersistenceUnitごとに個別のEntityManagerFactoryを作成する必要があります(おそらく必要なものではありません)が、異なるデータベース(異なるテーブル名)で同じクラスを使用する場合は、これが最適な方法です。

于 2009-06-29T02:28:43.657 に答える