1

私は動的に作成されたテーブルを持つデータベースを持っています (これらのテーブルは同じ構造を持っていますが、名前の末尾に年と現在の月の数字が続きます: data201201、data201202、data201203 ...) Data というエンティティクラスを作成しましたこれらのテーブルの構造を定義します。動的に使用する方法がわかりません。助けてください!ありがとう!

4

3 に答える 3

1

すべてのテーブルにクラスを作成しないと不可能ですが、これは月ごとにテーブルを作成するのと同じくらい悪い考えです。year最善のアドバイスは、monthと列を持つ単一のテーブルにすべての情報を格納することによってスキーマを正規化することです。

于 2012-11-19T19:19:54.867 に答える
1

これには、EclipseLink の動的エンティティ、またはテナント サポートごとのマルチテナシー テーブルを使用できる場合があります。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_multitenant.htm

また、Oracle などの一部のデータベースはテーブルのパーティショニングをサポートしているため、毎月新しい物理テーブルは必要ありません。

また、現在の月から選択するビューを定義して、関連する月を結合し、ビューにマップすることもできます。

于 2012-11-20T14:35:03.920 に答える
0

実行時にマッピングを変更することはできません。あなたの場合、すべてのテーブルを1つに結合し、代わり に@Inheritance@DiscriminatorColumnの組み合わせを使用できます

編集

あなたが組み合わせたテーブルは

GLOBAL_DATE_TABLE
{
number : ID
varchar : MONTH <- this will be discriminator column
varchar : NAME
... all another fields
}

あなたのマッピング

@Entity
@Table(name="GLOBAL_DATE_TABLE")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="MONTH", discriminatorType=STRING)
public class Date 
{ 
   @Column(name = "ID")
   @Id 
   private long id;   

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

   // another fields
}

@Entity
@DiscriminatorValue("data201201")
public class Data201201
{
   // if column MONTH contains value "ata201201" this instance will be created
   // logic for this table here   
}

@Entity
@DiscriminatorValue("data201202")
public class Data201202
{
   // if column MONTH contains value "ata201202" this instance will be created
   // logic for this table here    
}

@Entity
@DiscriminatorValue("data201203")
public class Data201203
{
   // if column MONTH contains value "ata201203" this instance will be created
   // logic for this table here     
}
于 2012-11-19T20:11:14.350 に答える