2009-11-25 4 views
2

Je dois mapper une base de données de lecagy à des fins en lecture seule qui contient la structure suivante:Mise en veille prolongée Mapping conditionnelle Many-to-One

Table MAIN: 
id productId productType 

Table PRODUCT_A: 
id description_a 

Table PRODUCT_B: 
id description_b 

Table PRODUCT_C: 
id description_c 

En fonction de la valeur dans la colonne productTyp, la productId fait référence soit à la PRODUCT_A, PRODUCT_B ou PRODUCT_C.

Pour chacune des tables je créer une entité Java. La classe Main contient une collection pour chaque produit.

Les produits ne sont pas dans un « est une » relation avec la classe principale. Il est utilisé dans d'autres circonstances en tant qu'entité indépendante.

Est-il possible de mapper ce en utilisant hbm.xml fichiers?

+0

pourquoi .hbm.xml? Tu ne peux pas utiliser les annotations? – Bozho

+0

no. mais il ne devrait faire aucune différence – bertolami

Répondre

2

La bonne façon de cartographier c'est via <any>:

<class name="Main" table="MAIN"> 
    ... 
    <any name="product" id-type="long" meta-type="string"> 
    <meta-value value="PRODUCT_A" class="ProductA"/> 
    <meta-value value="PRODUCT_B" class="ProductB"/> 
    <meta-value value="PRODUCT_C" class="ProductC"/> 
    <column name="productType"/> 
    <column name="productId"/> 
    </any> 
</class> 

Vous devez mapper la ProductA appropriée etc ... des classes aux tables correspondantes (peut-être vous avez déjà).

3

Regardez comme vous êtes à la recherche de l'héritage en utilisant la table par stratégie de sous-classe à l'aide d'un discriminateur. En Java, chaque classe PRODUCT_X devrait étendre la classe Main. This page explique les détails de la mise en œuvre de cette stratégie.

+0

me semblait que je pouvais utiliser l'héritage, aussi, mais les classes de produits sont loin d'être dans un « est une » relation à principal – bertolami

+0

Rappelez-vous que vous ne faites pas la conception OO ici, plutôt que vous êtes trouver le moyen le plus efficace de mapper les tables existantes. Si vous aviez le luxe de redessiner la structure de la table, je serais inquiet de savoir si l'héritage est la meilleure solution ou non. Mais puisque ce n'est pas le cas. Malheureusement, nous devons faire un compromis pour faire le travail. –

+0

d'accord. mais comme il y a beaucoup d'autres tables impliquées, j'hésite encore. – bertolami

Questions connexes