1

Hibernate プロジェクトと複数のエンティティがあります。各エンティティは、複数のデータベースに接続する必要があります。(table1、table2、table3、table4) 同じスキーマ。

これは達成できますか?または、それらのそれぞれに対して個別のエンティティを作成する必要がありますか?

私のエンティティはこのように見えます

@Entity
public class table1{
     @Id
     @Column(name="name")
     private String name;

     @Column(name="age")
     private String age;

     //getters setters
}
4

1 に答える 1

2

同様のスキーマを持つ異なるデータベースに同じエンティティを使用できますがEntityManager、特定のデータベースを指すように作成する必要があります。

  • データベースごとに永続化ユニットを作成します。

以下は、persistence.xml のサンプル コードです。

<persistence-unit name="DB_X"> 
<jta-data-source>java:/OracleDS</jta-data-source>  
... 
</persistence-unit>
<!-- Other Persistence Units -->

特定のユニットの EntityManager の作成

@PersistenceContext(unitName="DB_X")
private EntityManager xEM;

@PersistenceContext(unitName="DB_Y")
private EntityManager yEM;
  • それ以外の場合は、以下のように実行時に作成することもできます。

EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName); EntityManager em = emf.createEntityManager();

その後、同様のスキーマ、適切なテーブル構造を持つ異なるデータベースで同じエンティティを使用できますEntityManager


編集:質問として投稿したものとは異なるコメントに基づいて、複数のテーブルに同じエンティティを使用しようとしているようです。以下はそのサンプルコードです。

@MappedSuperClass
public class abstract BaseEntity {
     @Id
     @Column(name="name")
     private String name;

     @Column(name="age")
     private String age;

     //-- accessor methods
}

@Entity
@Table(name = "XTable")
public class XEntity extends BaseEntity {
    public XEntity(){}
}

@Entity
@Table(name = "YTable")
public class YEntity extends BaseEntity {

    public YEntity(){}
}

ここでXEntity&YEntityは似ていますが、それぞれのテーブルを指しています。

于 2012-12-13T06:58:25.103 に答える