2012-01-09 23 views
0

に参加し、私は、データベース内の6つのテーブルを持っている:CarMaster、アウディ、トヨタ、タタ、ヒュンダイ、フォード、マッピングが休止状態

マッピングテーブルは、2つの列があります。マッピングテーブルにmapId、tableNameの

エントリは次のようになります"1、Audi"、 "2、Toyota"のように "5、Ford"

最初の5つのテーブルのプライマリキーはcarIdです。

また、CarMasterにはmapId列があり、これをマッピングテーブルと結合するとテーブル名が与えられます。これにより、carIdキーを対応するテーブルと結合して、車に関する詳細を取得することができます。

carIdはmapId 3で10です。mapId 3はTataを意味します。 carId 10の詳細はTataテーブルに表示されますので、CarMasterとTataが参加して詳細を取得します。

このシナリオをHibernateでどのようにマップするのですか? 6つのテーブル間の関連は何ですか?

私は以下のPOJOをリストしていますので、多くの入力をしなくてもすぐに関連付けのアノテーションを手伝うことができます。

class CarMaster implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    @Column(name = "map_id") 
    private String mapId; 

    //other columns 

} 

class Audi implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    //other columns 
} 

class Toyota implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    //other columns 
} 

class Tata implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    //other columns 
} 

class Hyundai implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    //other columns 
} 

class Ford implements Serializable 
{ 
    @Id 
    @Column(name = "car_id") 
    private String carId; 

    //other columns 
} 

class Mapping implements Serializable 
{ 
    @Id 
    @Column(name = "map_id") 
    private String mapId; 

    @Column(name = "table_name") 
    private String tableName; 
} 

お読みください!

+0

例を作るためだけのものなのか分かりませんが、これらのテーブル名は非常に悪いデザインを指しています... – SJuan76

+0

@ SJuan76:はい、私は知っています..しかし残念ながら、私はそれは..私はこのデザインで作業する必要があります.. – Nik

答えて

0

結合されたサブクラス戦略を使用してエンティティの継承ツリーがあるように思えます。唯一の違いは、HibernateはCarMastermapId弁別を必要としないということであり、また、全くMappingテーブルを必要としないhttp://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-joinedsubclass

を参照してください。したがって、実際にデータベースモデルでこれらを保持する必要がある場合は、マッピングを通常のエンティティとしてマップし、CarMastermapId列をManyToOneに関連付けてMappingに関連付けます。 Fordインスタンスを作成するたびに、「Ford」テーブル名を持つMappingインスタンスとのマッピング関連付けを初期化する必要があります。

+0

CarMasterとマッピングとCarMasterと残りのクラス間のマッピングマッピングとの間に1対多のマッピング... carIdとしてキー列を持つCarMasterクラス要素内に4つのsubClasses要素があります。 .. CarMasterを指しているAudi、TataなどのCarMasterプロパティがありますか? – Nik

+0

いいえ:FordとCarMasterの間に継承関係があるため、Ford **は** CarMasterです。フォードはCarMasterを拡張します。 –

+0

ありがとうございます..解決策をチェックし、問題を何か問題に更新します! – Nik