Hibernate Mapping Deux Tableaux à Une seule Classe
J'ai besoin de la carte de deux tableaux à une seule classe, de la difficulté à comprendre cela. Une table des CHAMBRES, l'autre est FORMATEURS.
Les CHAMBRES de table:
OOC_UNIT_ID NUMBER(6,0)
OOC_START_DT DATE
OOC_START_TM DATE
OOC_DT_MOD DATE
OOC_USER_MOD VARCHAR2(30 BYTE)
OOC_END_DT DATE
OOC_END_TM DATE
OOC_REASON_TX VARCHAR2(250 BYTE)
OOC_RESERVED_FOR VARCHAR2(30 BYTE)
OOC_CLS_ID NUMBER(9,0)
OOC_TIMEFRAME VARCHAR2(1 BYTE)
OOC_WSD_CD VARCHAR2(2 BYTE)
OOC_TEAM_UNIT_ID NUMBER(6,0)
OOC_WSD_ACT_RMAT_ID NUMBER(6,0)
FORMATEURS table:
TRSC_ID NUMBER(9,0) -- generated sequence
TRSC_OOC_UNIT_ID NUMBER(6,0)
TRSC_OOC_START_DT DATE
TRSC_OOC_START_TM DATE
TRSC_OOC_RESERVED_FOR VARCHAR2(30 BYTE)
TRSC_TPOC_ID NUMBER(6,0)
TRSC_DT_CREATED DATE
TRSC_USER_CREATED VARCHAR2(30 BYTE)
TRSC_DT_MOD DATE
TRSC_USER_MOD VARCHAR2(30 BYTE)
TRSC_REMARKS VARCHAR2(250 BYTE)
TRSC_NOSHOW_REASON VARCHAR2(100 BYTE)
Tables doivent être jointes sur OOC_UNIT_ID=TRSC_OOC_UNIT_ID
, OOC_START_DT=TRSC_OOC_START_DT
et OOC_START_TM=TRSC_OOC_START_TM
.
Clé primaire pour les CHAMBRES de table est: OOC_UNIT_ID, OOC_START_DT, OOC_START_TM
. Clé primaire pour les FORMATEURS de table est: TRSC_ID
.
J'ai besoin d'interroger ces données par OOC_UNIT_ID
, OOC_START_DT
, OOC_START_TM
, OOC_END_DT
, OOC_END_TM
et OOC_WSD_ACT_RMAT_ID
.
En SQL il pourrait être quelque chose comme:
SELECT *
FROM TRAINERS t, ROOMS r
WHERE t.TRSC_OOC_UNIT_ID = r.OOC_UNIT_ID
AND t.TRSC_OOC_START_DT = r.OOC_START_DT
AND t.TRSC_OOC_START_TM = r.OOC_START_TM
AND ...
Je suis l'aide de la CHAMBRES table d'ailleurs dans le projet et il est déjà mappé comme un objet autonome. Y aurait-il un moyen d'utiliser que comme un sous-objet sur un des FORMATEURS de l'objet, ou serait-il plus facile de cartographier ces deux tables dans un objet plat? Comment la cartographie de look?
Grâce,
Nick
OriginalL'auteur Nicholas Hirras | 2009-11-03
Vous devez vous connecter pour publier un commentaire.
Pour mapper une classe unique à deux (ou plus) des tables séparées, vous devez utiliser un @SecondaryTable annotation:
Vous aurez alors besoin d'annoter chaque propriété individuelle mappé à
TRAINERS
table avec@Column(table="TRAINERS")
pour spécifier la table à laquelle il appartient. Si vous êtes à l'aide de mappages XML au lieu de cela, tous les ci-dessus peut être effectuée via rejoindre élément.Tout ce que dit, il me semble que vos deux tables sont plutôt de nature différente et ne doit pas être mappé à une seule classe (surtout depuis que vous avez dit que vous avez déjà pensé à
ROOMS
ailleurs). Peut-être vous devriez faire un plan de votre Formateur ManyToOne association à la place.OriginalL'auteur ChssPly76
Solution, je suis venu avec l'air de fonctionner aussi loin que l'interrogation de données, je n'ai pas essayé insert/update/delete encore.
J'ai créé le
TRAINER
objet d'étendre leROOM
objet.Puis j'ai modifié la cartographie pour
ROOM
d'inclure une joined-subclass:Jusqu'à présent, il semble être au travail.
Merci,
Nick
C'est horriblement mal. Insérer / supprimer aurait une incidence sur les deux tables en même temps et en plus vous allez faire des jointures pour
TRAINERS
chaque fois que vous essayez d'utiliserRoom
objet. De chambre et de Formateur ont un-à-plusieurs ou plusieurs-à-plusieurs) association, ils ont certainement ne pas leur place dans une hiérarchie.OriginalL'auteur Nicholas Hirras
Dans mon expérience, la simplicité est la clé lors de l'utilisation d'un ORM y compris la mise en veille prolongée. Je voudrais créer une base de données de la vue en fonction de votre SQL permet d'appel qui
TRAINERS_ROOMS
alors simple carte de la base de données en vue d'un nouvel objet Java permet d'appel quiTrainersRooms
.Vous obtenez simple et facile à manager hibernate mappages, mais bien sûr, vous pouvez effectuer toutes les mises à jour à l'aide de ce nouvel objet, donc si vous avez besoin, cette solution ne fonctionne pas pour vous.
OriginalL'auteur Tendayi Mawushe
Vous pouvez créer une requête nommée qui est lié à un objet personnalisé. C'est la solution que je voudrais aller avec, car aucun changement à la base de données serait nécessaire.
OriginalL'auteur monksy