IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Mapping OneToOne sans clé étrangère


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Mapping OneToOne sans clé étrangère
    Bonjour,

    j'ai un modèle de données qui contient uniquement des PK, mais "fonctionnellement parlant" les tables sont liées par des champs qui font office de FK sans que les contraintes FK existent (En grod aucune FK dans la base)
    J'ai essayé un tas de mapping et config différentes sous Hibernate mais si les clés étrangères n'existent pas il semble impossible à Hibernate de faire comme si elles existaient :s
    Est-ce normal ?
    Enfin je ne peux pas, pour des raisons historiques, ajouter des FK au modèle mais j'aimerai qu'au niveau du code Java l'on puisse manipuler les entités comme si ces liens existaient.

    Par exemple l'entité "voiture" sur laquelle j'aimerai ajouter l'entité "volant" ne semble pas pouvoir fonctionner si la base de donnée ne contient pas de FK, de plus je ne souhaite pas que hibernate ajoute une FK dans la base.

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quand tu dis qu'il n'y a pas de FK, tu veux dire que volant a un champ volant_id et que ce volant_id a la même valeur que le voiture_id dans voiture?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Oui c'est presque ça à la différence que les PK de Voiture et Volant sont composite mais que celle de Volant à un champs de plus en PK qui n'existe pas dans Voiture:
    Voiture PK:
    - annee
    - code_entreprise
    - type_enr

    Volant
    - annee
    - code_entreprise
    - type_enr
    - zone

    Aucun champs n'ayant de contrainte d'unicité.
    Les 3 champs de PK sont identiques en valeur dans les deux tables et forment une liaison fonctionnelle sauf que le champs zone en plus dans Volant n'existe pas dans Voiture mais que de tout façon il ne peut y avoir q'un volant pour chaque voiture, en fait bien entendu le MCD permettrait de faire du oneToMany mais les développeurs savent qu'il ne faut pas le faire (C'est tout le dilemme d'une base dénormalisée que je veux connecter à Hibernate pour "simuler" une normalisation)

    Et je ne peux pas modifier le modèle de la base parce qu'un autre ERP viellot l'utilise.

    En Java le truc qui compile mais qui ne retourne jamais de Volant avec sa Voiture est:
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumns({
    @JoinColumn(name="annee", referencedColumnName="annee",insertable=false, updatable=false),
    @JoinColumn(name="code_entreprise", referencedColumnName="code_entreprise", insertable=false, updatable=false),
    @JoinColumn(name="type_enr", referencedColumnName="type_enr", insertable=false, updatable=false),
    @JoinColumn(name="zone_fk", referencedColumnName="zone", insertable=false, updatable=false)
    })
    private Volant mVolant;

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    A vu de nez j'essaierais ceci:

    une clé composite pour Voiture: annee; code_entreprise; type_enr
    une clé composite pour Volant: Voiture, zone


    c'est juste une idée, je n'ai jamais eu ce genre de situation tordue.

    Autre solution, ne pas faire directement un mapping 1 to 1, mais plutot faire deux sets de classes séparées: voiture / volant, et mettre dans voiture une propriété liée à une sous requete sql, idem coté volant. C'est readonly pour hibernate donc tu ne sais pas gérer ta prsistence là dessus, mais au moins au chargement du volant tu récupère la voiture liée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Sauf que c'est le volant que je veux récupérer à partir de la voiture, mais du coup l'idée est bonne à partir du moment où ça ne me force pas à modifier le modèle et les contraintes de la base.
    A voir... je tente cette piste.

    Merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2008, 11h56
  2. Choix des index dans tables sans clés étrangères ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 09h56
  3. [hibernate 3] [mapping] Description des clés étrangères
    Par CharlSka dans le forum Hibernate
    Réponses: 2
    Dernier message: 01/02/2007, 09h01
  4. MAPPING oneToOne pb au niveau SGBD
    Par grosFab dans le forum Hibernate
    Réponses: 4
    Dernier message: 25/08/2006, 11h17
  5. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo