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 :

Création d'une primaire et étrangère


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut Création d'une primaire et étrangère
    Bonjour,

    Je souhaite créer une table contenant une clé qui soit à la fois primaire, et secondaire. auriez-vous une idée?
    pour le moment, j'ai la classe task:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Entity
    @Table(name="TASK")
    public class Task implements Serializable{
     
    @Id
    @Column(name="TASK_ID", length=36)
    private String task_id;
     
    @OneToOne(mappedBy="task",cascade={cascadeType.ALL})
    private Barrage_JT barrageJT;
    ...
    et dans mon autre classe j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Entity
    @Table(name="BARRAGE_JT")
    public class Barrage_JT implements Serializable{
     
    @Id
    @Column(name="TASK_ID")
    private String task_id;
     
    @OneToOne(fetch=fetchType.EAGER)
    private Task task;
    ...
    dans ce cas je me retrouve avec une clé primaire TASK_ID et une clé étrangère TASK_TASK_ID, mais si je change le nom de la colonne dans la classe Barrage_JT, je me retrouve bien avec une seule colonne mais qui porte le nom TASK_TASK_ID. Or il faut que ma clé s'apele TASK_ID.

    Pouvez vous m'aider?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par krum Voir le message
    Bonjour,

    Je souhaite créer une table contenant une clé qui soit à la fois primaire, et secondaire. auriez-vous une idée?
    pour le moment, j'ai la classe task:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Entity
    @Table(name="TASK")
    public class Task implements Serializable{
     
    @Id
    @Column(name="TASK_ID", length=36)
    private String task_id;
     
    @OneToOne(mappedBy="task",cascade={cascadeType.ALL})
    private Barrage_JT barrageJT;
    ...
    et dans mon autre classe j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Entity
    @Table(name="BARRAGE_JT")
    public class Barrage_JT implements Serializable{
     
    @Id
    @Column(name="TASK_ID")
    private String task_id;
     
    @OneToOne(fetch=fetchType.EAGER)
    private Task task;
    ...
    dans ce cas je me retrouve avec une clé primaire TASK_ID et une clé étrangère TASK_TASK_ID, mais si je change le nom de la colonne dans la classe Barrage_JT, je me retrouve bien avec une seule colonne mais qui porte le nom TASK_TASK_ID. Or il faut que ma clé s'apele TASK_ID.

    Pouvez vous m'aider?
    Barrage_JT doit avoir sa propre PK :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Entity
    @Table(name="BARRAGE_JT")
    public class Barrage_JT implements Serializable{
     
    @Id
    @Column(name="BARRAGE_ID")
    protected String barrage_id ;
     
    @OneToOne(fetch=fetchType.EAGER)
    @JoinColumn(name = "task_id")
    protected Task task;
    ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @OneToOne(cascade={cascadeType.ALL})
    @JoinColumn(name = "barrage_id")
    private Barrage_JT barrageJT;
    Mais, si en fait ce que vous voulez exprimer est "Barrage_JT est une sous-classe de Task" alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Entity
    @Table(name="BARRAGE_JT")
    @Inheritance(strategy=InheritanceType.YOUR_CHOICE_HERE) 
    public class Barrage_JT extends Task implements Serializable{
     
    ...
    et pas besoin de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Barrage_JT barrageJT;
    dans Task

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    Bonjour,

    merci pour ta réponse, malheureusement je dois suivre un modèle de base de donnée et se dernier m'oblige à avoir une clé primaire et étrangère qui soient la même...:

    BARRAGE_JT
    (PK) TASK_ID: VARCHAR(36) (FK)
    ...

    Personne ne saurait comment faire?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par krum Voir le message
    Bonjour,

    merci pour ta réponse, malheureusement je dois suivre un modèle de base de donnée et se dernier m'oblige à avoir une clé primaire et étrangère qui soient la même...:

    BARRAGE_JT
    (PK) TASK_ID: VARCHAR(36) (FK)
    ...

    Personne ne saurait comment faire?
    en termes "Object Oriented" cela signifie que Barrage est une sous-classe de Task et en conséquence vous devez écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Barrage_JT extends Task
    si vous voulez qu'ils partagent la même PK…

    si cela ne correspond pas à votre modélisation, je crains qu'elle ne soit pas utilisable avec un ORM…

  5. #5
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    merci, je vais voir ça.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    Bonjour,

    après avoir enfin pu tester cette solution, je reviens vers vous car elle ne convient pas. en effet, cela implique la disparition de ma table BARRAGE_JT.

    Auriez vous une autre solution à mon problème?
    il faut juste que ma clé primaire et étrangère ait le même nom...
    merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2012, 15h51
  2. Création d'une clé étrangère : Msg 1776.
    Par guitou0 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/01/2011, 12h12
  3. Problème a la création d'une clef étrangère
    Par tomy29 dans le forum Administration
    Réponses: 3
    Dernier message: 19/07/2008, 11h07
  4. erreur à la création d'une clé primaire
    Par dams78 dans le forum SQL
    Réponses: 1
    Dernier message: 11/01/2008, 11h25
  5. création d'une clé étrangère sous mysql
    Par franfr57 dans le forum Outils
    Réponses: 2
    Dernier message: 23/03/2006, 09h24

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