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

JPA Java Discussion :

Gérer une table de jointure ?


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Par défaut Gérer une table de jointure ?
    Bonsoir,

    j'ouvre un nouveau post pour un sujet tjs sur l'utilisation des JPA. Un sujet délicat encore semble t il

    Prenons un cas d'école une nouvelle fois :

    3 tables toutes liées via une table de jointure vu que nous sommes en présence de cardinalité 0,n.

    - Nous avons donc T_E_USER, T_E_TYPE et T_E_AIR.
    Chaque table ayant un ID numérique, et un champ simple type VARCHAR.

    - Une table de jointure T_J_USR_TPE_AIR est créée avec les 3 ID référencées en clés étrangères formant une clé primaire composé.

    En terme de code, je suis toujours sur une utilisation d'outils style HIbernate Tools pour me générer mes entités (version JPA).
    Et c'est là que les problèmes commencent....

    Je me retrouve dans chaque classe représentant une table d'entité avec un attribut de type Set ayant une annotation @OnetoMany.

    J'ai une classe représentant la jointure qui a un attribut id de type complexe (une autre classe) avec une annotation EmbeddedId pour la clé composée.
    Et des attributs représentant les 3 entités avec des annotations @ManyToOne.


    Voici mes questions, car c'est là que je suis paumé :
    - que doit définir le "mappedBy" dans l'annotation @OneToMany dans mes entités ?
    - Suis je obligé de faire une classe Entité représentative de la jointure ?
    - Comment fonctionne le mode CASCADE ? Est il possible de l'utiliser dans ce contexte afin d'enrichir la table de jointure "automatiquement" ? Ou dois je instancier manuellement la classe représentative de la jointure afin de persister moi même les infos ?

    Bref si qqun a un exemple concret....je suis preneur. Je me farcis des dizaines de doc PDF sur les JPA mais je ne trouve aucune vraie explication pour ce genre d'exemple.

    Un grand merci par avance à toute âme charitable qui pourrait me filer un coup de main.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Par défaut
    Bon voici ce que je tente de mettre en place, je n'ai pas encore pu faire un test (JUnit ni web).

    Dans mes entités, je mets des relations OneToMany du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class User implements java.io.Serializable {
     
    ...
     
    @OneToMany(fetch = FetchType.LAZY, 
    	mappedBy = "user",
    	cascade = { CascadeType.REMOVE })
    private Set<UserConfig> userConfigs = new HashSet<UserConfig>(0);
    UserConfig étant mon entité mappé sur ma table de jointure.
    MappedBy, d'après ce que je comprends, doit pointer sur le nom de l'attribut présent dans l'entité spécifique à la jointure (ici en l'occurence ma classe est User, j'ai donc un attribut de type User qui s'appelle user dans ma classe UserConfig).

    Et dans mon entité UserConfig, j'ai une relation inverse ManyToOne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class UserConfig implements java.io.Serializable {
     
    ..
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "URA_USR_ID", nullable = false, insertable = false, updatable = false)	
    private User user;
    Voilà en espérant que cela soit correcte, et qu'ensuite tout se "goupille" bien pour le lazy loading tout comme pour le mode cascade que j'ai paramétré juste en cas de suppression de mon user (pour supprimer automatiquement dans ma table de jointure tout ce qui est en rapport avec le dit user).

    J'ai répété ensuite cela pour mes 2 autres entités liées à ma table de jointure.

    Je vous tiendrai au courant si cela fonctionne (je croise les doigts).

    Si qqun voit une coquille aussi grosse que moi, n'hésitez pas à mettre un commentaire please....
    Merci.

Discussions similaires

  1. gérer le poids d'une table de jointure
    Par Overstone dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/06/2008, 15h28
  2. Gérer une table volumineuse dans une seule forme
    Par lolo_momo dans le forum VB.NET
    Réponses: 5
    Dernier message: 03/07/2007, 11h55
  3. Attribuer un ordre avec une table de jointure.
    Par hackiles dans le forum Ruby on Rails
    Réponses: 14
    Dernier message: 09/06/2007, 14h27
  4. Jointures externes sur une table de jointure
    Par mart1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/10/2006, 01h33
  5. Utilisation de classes pour gérer une table
    Par mathias dans le forum Access
    Réponses: 11
    Dernier message: 30/08/2006, 16h57

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