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

Persistance des données Java Discussion :

[JPA / Hibernate] Cascade qui ne cascade pas !


Sujet :

Persistance des données Java

  1. #1
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut [JPA / Hibernate] Cascade qui ne cascade pas !
    Bonjour à tous (et à toutes)

    Bon, en fait je voulais titrer plus précisément, mais ça aurait donné un truc dans le genre :

    [Glassfish][Hibernate][JPA][EJB3][Seam][Ajax4jsf][Facelets] Persistence d'entités en relation avec cascadeType.PERSIST qui ne fonctionne pas

    et ça fait un titre un peu long pour le forum.
    Donc, je présente en gros ce que j'ai (je vous avoue avoir pas mal cherché jusqu'à maintenant...). Le principe est simple :

    Un customer a plusieurs orders qui ont elles-même plusieurs orderLines
    Un customer a plusieurs contacts
    Les contacts sont liés aux orderLines par un Binder qui dit quel contact a quel type de service pour quell orderLine

    Le souci c'est que la persistence se fait bien pour les contacts et les orders, mais qu'elle ne va pas plus loin. C'est à dire que lorsqu'on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    em.persist(customer);
    le customer est persisté, les orders en relation sont persistées et les contacts en relation sont persistés, mais pas les orderlines, ni les binders.
    Je précise qu'ayant débuggué jusqu'au moment de la persistance, mes objets sont bien en relation (avec les bons identifiants, des orderlines crées et rattachées à l'orders etc...).

    Voici le code de la classe customer
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    @Entity
    @Name("Customer")
    public class Customer implements Serializable {
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long customerId;
     
        //champs
     
        /**
         *Creates the foreign key in relation to the Order table 
         */   
        @OneToMany(mappedBy = "customer", cascade = CascadeType.PERSIST)
        private List<Order> orders;
     
        /**
         *Creates the foreign key in relation to the Contact table 
         */
        @OneToMany(mappedBy = "customer", cascade = CascadeType.PERSIST)
        private List<Contact> contacts;
     
        /** Creates a new instance of Client */
        public Customer() {
     
     
        }
         ...
        //getter et setters
    }
    celui de la classe order
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    @Entity
    @Table(name = "client_order")
    public class Order implements Serializable {
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long orderId;
     
        //champs
     
        /**
         *Creates the foreign key in relation to the Partner table 
         */
        @ManyToOne
        @JoinColumn (name = "partnerId_fk")
        private Partner partner;
     
        /**
         *Creates the foreign key in relation to the Customer table 
         */
        @ManyToOne
        @JoinColumn (name = "customerId_fk")
        private Customer customer;
     
        /**
         *This table creates the joint between the purchase order and its lines of order.
         *The primary key of this table is consisted of the two foreign keys.
         */          
        @OneToMany(mappedBy = "order")
        private List<OrderLine> orderLines;
        /**
         * Creates a new instance of Order
         */
        public Order() {
        } 
         ...
        //getter et setters
    }
    celui de la classe OrderLine
    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
    17
    18
    19
    20
    21
    22
    23
     
     
    @Entity
    @Name("OrderLine")
    public class OrderLine implements Serializable {
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long lineId;
     
        //champs
     
        @ManyToOne
        @JoinColumn (name = "orderId")
        private Order order;
     
     
        /** Creates a new instance of OrderLine */
        public OrderLine() {
        }
       ...
        //getter et setters
    }
    Si quelqu'un a une idée, ça ne serait pas de refus.
    Je précise également qu'à l'origine la relation order<->orderline était unidirectionnelle (une table de jointure explicitement faite entre les deux) et ça ne fonctionnait pas. Je pensais que la bidirectionnalité y ferait quelque chose...

    Merci à ceux qui ont les yeux fatigués par la lecture de ce long post.
    Courage, plus qu'une phrase.

    Merci
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  2. #2
    Membre habitué Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Points : 178
    Points
    178
    Par défaut
    Il faut peut-être ajouter le CASCADE.PERSIST dans la relation @OneToMany Order -> OrderLine
    Tout le monde savait que c'était impossible à faire. Puis un jour quelqu'un est arrivé qui ne le savait pas, et il le fit (Winston Churchill)

Discussions similaires

  1. combox en cascade qui ne se remplit pas
    Par arthur83fr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/12/2011, 16h43
  2. Count et Left join en cascade qui ne passent pas
    Par Invité dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/02/2010, 14h07
  3. Le cascade qui ne cascadai pas
    Par metalcoyote dans le forum Outils
    Réponses: 14
    Dernier message: 22/01/2008, 13h43
  4. [Hibernate 3] Delete en cascade
    Par hugo123 dans le forum Hibernate
    Réponses: 14
    Dernier message: 15/12/2006, 19h05
  5. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18

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