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 :

Relation avec une autre entité par son id et non pas l'entité elle-même


Sujet :

JPA Java

  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut Relation avec une autre entité par son id et non pas l'entité elle-même
    Bonjour,

    J'ai actuellement la relation suivante qui fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @ManyToOne(
            fetch = FetchType.EAGER)
        @JoinColumn(
            name = "MD_MANDAT_ID",
            nullable = false)
        private Mandat Mandat;
    J'aurais voulu éviter que mon entité connaisse l'entité Mandat, mais qu'elle connaisse simplement son ID.
    Pour ce faire, j'ai modifié le code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @ManyToOne(
            fetch = FetchType.EAGER)
        @JoinColumn(
            name = "MD_MANDAT_ID",
            nullable = false)
        private int mandatId;
    Le problème est que j'ai l'erreur suivante :
    Exception Description: [class ch.application.baseservices.mandat.model.Travail] uses a non-entity [class int] as target entity in the relationship attribute [field mandatId].
    J'en déduis donc qu'il n'est pas possible de faire comme cela mais j'aimerais la confirmation que c'est bien le cas
    Et du coup, y'a-t-il une solution autre que le premier bout de code (avec l'entité et non l'id) ?

    Merci pour votre aide et vos conseils

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas mapper directement la colonne de ta table ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    @Table(...)
    public class TableFille
    {
       private int uid;
       private int uid_mandat;
       ...
     
       @Column(name="MD_MANDAT_ID")
       public int getUidMandat()
       {
          return uid_mandat;
       }
       ...
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    J'ai essayé mais du coup il ne considère plus qu'il y a une clé étrangère qui pointe sur la table mère
    Il me génère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    create table dbo.MD_TRAVAIL_EN_COURS (
            ID int identity not null,
            VERSION int not null,
            mandatId int not null,
            MONTANT double precision not null,
            REMARQUE varchar(500) null,
            SOLDE_TEC_PRECEDENT double precision not null,
            CO_TRIMESTRE_ID int not null,
            primary key (ID)
        );
     
    alter table dbo.MD_TRAVAIL_EN_COURS 
            add constraint FKyz 
            foreign key (CO_TRIMESTRE_ID) 
            references dbo.CO_TRIMESTRE;
    Il manque en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    alter table dbo.MD_TRAVAIL_EN_COURS 
            add constraint FKxy 
            foreign key (MD_MANDAT_ID) 
            references dbo.MD_MANDAT;

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    J'imagine que tu utilises le mapping pour générer la base de données, c'est ça ?
    Là, je ne sais pas si c'est prévu... personnellement, je n'utilise jamais cette fonctionnalité, j'utilise un fichier de script SQL pour créer la base de données.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    J'ai deux options à te proposer mais je ne les ai pas testées:
    - utiliser l'attribut columnDefinition de l'annotation @Column dans lequel tu peux placer le SQL que tu souhaites (donc ta contrainte de clé étrangère). Inconvénient, tu perds en portabilité.
    - garder ton manyToOne et ajouter ceci, (tu peux mettre les setter / getter de ton Mandat en private si tu veux pas y accéder: pas certain que ça fonctionne cependant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @Column(name = "MD_MANDAT_ID", insertable = false, updatable = false)
        private String mandatId;

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2012, 17h49
  2. [MCD] Entité en relation avec 2 autres entités ayant une relation entre elles
    Par clement.bouillier dans le forum Schéma
    Réponses: 8
    Dernier message: 25/09/2009, 20h20
  3. Réponses: 11
    Dernier message: 30/04/2008, 13h37
  4. Ajout dans une table et relation avec d'autres
    Par climz dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 15h32

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