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 :

Mapping one-to-many - saveOrUpdate


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 106
    Par défaut Mapping one-to-many - saveOrUpdate
    Bonjour à tous,

    J'ai un souci avec la méthode saveOrUpdate pour un mapping one-to-many.

    En fait pour faire simple j'ai 2 objets :

    - une fenetre qui a une propriété "maison" de type Maison (relation one-to-many)

    - et une maison qui a une propriété "lesFenetres" de type Set<Fenetre> (relation many-to-one).

    Mon problème est que lorsque je crée une nouvelle fenetre avec comme attribut "maison1" et que je fais un saveOrUpdate, mon objet "maison1" n'est pas rafraichie et n'a pas plus de fenetre qu'avant...

    Y a-t-il un moyen de rafraichir automatique l'objet Maison ?

    Merci!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    si les données sont bien dans la DB, au choix:


    dans la meme session, faire un session.merge(maison1); (pas certain que ça marche)

    dans une nouvelle session, faire un session.get() de la maison.


    Note qu'en pratique, il vaux mieux coder tes beans / faire le travail toi même, après tout, on peux argumenter qu'avec ou sans sauvegarde dans la DB avec hibernate, si une fenetre appartiens à une maison, la maison doit contenir la fenetre

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    - une fenetre qui a une propriété "maison" de type Maison (relation one-to-many)

    - et une maison qui a une propriété "lesFenetres" de type Set<Fenetre> (relation many-to-one).
    Je pense que c'est l'inverse dans Hibernate : many-to-one et one-to-many.

    y a plusieurs raisons pour lesquelles ca peut ne pas marcher.
    Montre nous ton mapping et le code ou tu sauvegardes ta fenetre.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 106
    Par défaut
    Merci pour vos réponses.

    Effectivement je me suis planté dans les mappings ^^

    Voici la mapping maison fenetres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Override
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "maison", orphanRemoval = true)
    @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "/data1")
    @BatchSize(size = 20)
    @Cascade(CascadeType.ALL)
    public Set<Fenetre> getFenetres() {
    		return this.fenetres;
    	}
    fenetre maison dans le bean fenetre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MAISON_ID")
    @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, 
    region = "/data1")
    public Maison getMaison() {
    		return this.maison;
    }
    Concernant le save, je fais juste un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    saveOrUpdate(fenetre);
    avec l'id de la fenetre étant null : ma fenetre est bien insérée ; la maison n'est juste pas mise à jour.

    Merci!

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut


    Hibernate accepte beaucoup trop de variantes (et je supporte pas ca)
    Donc je sais pas si ton prob est la, mais je me lance.

    Tu fais mappedBy ="maison" dans ton entité Maison.
    En faisant ca, tu déclares l'entité fenetre comme responsable de l'association entre les 2 entités. Ce qui est cohérent avec ta facon de sauvegarder.
    Tu as sauvegardé une fenetre et non une maison.
    Maintenant, ce qui m'étonne, c'est que @Cascade(CascadeType.ALL) est directement sur getFenetres() coté Maison. Sauf que ce n'est pas Maison le responsable de l'association.
    Essaye de placer le cascade plutôt dans la déclaration de l'association Fenetre :
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "maison", orphanRemoval = true, cascade=CascadeType.ALL)

Discussions similaires

  1. Insertion de données avec un mapping one-to-many
    Par mj_51 dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/06/2014, 13h39
  2. [Mapping] Erreur lors du mapping one-to-many
    Par nifertari18 dans le forum Hibernate
    Réponses: 2
    Dernier message: 21/05/2013, 21h15
  3. Mapping One to Many
    Par Ethylene dans le forum Hibernate
    Réponses: 9
    Dernier message: 25/09/2007, 16h42
  4. Réponses: 2
    Dernier message: 17/07/2006, 14h45
  5. [Hibernate] Mapping one-to-many + cle composite
    Par brainstorm dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/06/2006, 10h51

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