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 :

[JPA/Hibernate] Id composé et persistance


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Par défaut [JPA/Hibernate] Id composé et persistance
    Hello,
    J'ai un souci pour persister une entité qui contient une clé composée, elle même constituée par 2 clés étrangères.
    Pour illustrer, j'ai une simple table1:
    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="TABLE_1")
    public class Table1 implements Serializable {
               @Id
    	@SequenceGenerator(name="TABLE_1_TABLE1PK_GENERATOR", sequenceName="SEQ_TABLE_1")
    	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TABLE_1_TABLE1PK_GENERATOR")
    	@Column(name="TABLE1_PK", unique=true, nullable=false, length=2)
    	private String table1Pk;
     
               	@OneToMany(mappedBy="table1", cascade=CascadeType.ALL)
    	private List<Table2> tables;
    ...
    }
    ma Table3:
    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="TABLE_3")
    public class Table3 implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@SequenceGenerator(name="TABLE_3_TABLE3PK_GENERATOR", sequenceName="SEQ_TABLE_3")
    	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TABLE_3_TABLE3PK_GENERATOR")
    	@Column(name="TABLE_3_PK", unique=true, nullable=false, length=2)
    	private String table3Pk;
    ...
    }
    Et celle que je n'arrive pas à persister:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    @Table(name="TABLE_2")
    public class Table2 implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	@EmbeddedId
    	private Table2PK id;
    ...
    }
    Et l'id composé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Embeddable
    public class Table2PK implements Serializable {
    	//default serial version id, required for serializable classes.
    	private static final long serialVersionUID = 1L;
     
    	@Column(name="TABLE1_PK", unique=true, nullable=false, length=20)
    	private String table1Pk;
     
    	@Column(name="TABLE3_PK", unique=true, nullable=false, length=2)
    	private String table3Pk;
    ...
    }
    Et je veux persister table1, sauf que j'ai une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: null id generated for:class Table2
    Donc, soit j'oublie de setter une valeur dans une des entités, soit je dois d'abord persister table1, puis manuellement, persister table2?
    Je vous ai mis une version light de mon code, j'espere que j'ai rien oublié

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Tu pourrais nous montrer le code que tu utilises pour créer ton entité ?

  3. #3
    Membre confirmé Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Par défaut
    Alors voici la méthode de mon DAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Table1 table1=new Table1();
            String id = getStringId(SEQ_NAME);//get PK from sequence in string
            table1.setActId(id);
            ...; //set data in table1
     
            Table2 table2 = new Table2();
            table2.setTable1(table1);//set ref to table1 in table2
            table2.setTable3(new Table3());//set ref to table3 in table2
            ...;//set data in table2
     
            table1.setTable2(table2);//set ref to table2 in table1
     
            entityManager.persist(table1);

Discussions similaires

  1. persistance JPA hibernate Mysql primefaces
    Par Leroy.co dans le forum JPA
    Réponses: 11
    Dernier message: 16/05/2013, 13h05
  2. Réponses: 6
    Dernier message: 13/07/2012, 22h02
  3. [Core] JPA/Hibernate/MySQL persistance données Excel (POI)
    Par high4life dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/05/2012, 14h23
  4. erreur de persistence jpa/hibernate
    Par Jacobian dans le forum JPA
    Réponses: 6
    Dernier message: 08/01/2009, 17h28
  5. Réponses: 1
    Dernier message: 23/01/2008, 10h12

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