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

  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 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    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 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Citation Envoyé par krum Voir le message
    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.
    ça, cela dépend uniquement de votre stratégie d'inhéritance

    @Inheritance(strategy=InheritanceType.YOUR_CHOICE)

    à mettre avec les @Entity.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    merci beaucoup!!
    grâce à vous j'ai enfin une table qui ressemble à ce que l'on me demande, je verrais par la suite si ça fait bien ce que l'on veut!
    merci encore!

  9. #9
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    salut à tous,
    j'ai de nouveau un problème similaire sauf que cette fois j'aimerais que la clé primaire et étrangère ait un autre nom que la clé primaire de l'autre table...
    y a-t-il un moyen de faire ça?
    merci d'avance

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Citation Envoyé par krum Voir le message
    salut à tous,
    j'ai de nouveau un problème similaire sauf que cette fois j'aimerais que la clé primaire et étrangère ait un autre nom que la clé primaire de l'autre table...
    y a-t-il un moyen de faire ça?
    merci d'avance
    avec Hibernate :

    @org.hibernate.annotations.ForeignKey

  11. #11
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Par défaut
    ou est-ce que je met cette annotation?

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2012, 16h51
  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, 13h12
  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, 12h07
  4. erreur à la création d'une clé primaire
    Par dams78 dans le forum SQL
    Réponses: 1
    Dernier message: 11/01/2008, 12h25
  5. création d'une clé étrangère sous mysql
    Par franfr57 dans le forum Outils
    Réponses: 2
    Dernier message: 23/03/2006, 10h24

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