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 :

[HIBERNATE] pattern Open Session in View


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Mai 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 217
    Par défaut [HIBERNATE] pattern Open Session in View
    Bonjour,

    je travaille sur une appli web et plus ca va ... plus j'ai l'impression qu'hibernate n'est qu'a moitié adapté à ce genre d'application !!!

    Le pb est classique, alléger le nombre de requete en laissant le lazy=true, et réussir à charger des collections a la demande ...

    Je suis tombé sur le pattern "Open Session in View" mais, il me laisse perplexe car je trouve pas ca très 'propre' ...

    Est ce que certain on une solution alternative ?

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 217
    Par défaut

    Extrait de la doc officielle Hibernate 3.1 final :

    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
                             - Si vous décidez d'utiliser le paradigme                         session-par-requête                         discuté plus haut, toutes les entités chargées en mémoire deviendront des objets détachés durant                         le temps de réflexion de l'usager. Hibernate vous permet de rattacher ces objets et de persister                         les modifications y ayant été apportées. Ce pattern est appelé:                         session-per- request-with-detached-objects                         (littéralement: session- par-requête-avec-objets-détachés). Le versionnage automatique est                         utilisé afin d'isoler les modifications concurrentes.
    
    ...
    
    11.3.3. Les objets détachés et le versionnage automatique
    
    Chaque interaction avec le système de persistance se fait via une nouvelle Session .              Toutefois, les mêmes instances d'objets persistants sont réutilisées pour chacune de ces interactions.             L'application doit pouvoir manipuler l'état des instances détachées ayant été chargées antérieurement via             une autre session. Pour ce faire, ces objets persistants doivent être rattachés à la Session              courante en utilisant Session.update() , Session.saveOrUpdate() , ou Session.merge() .         
                // foo est une instance chargée antérieurement par une autre session
    
                foo.setProperty("bar");
                session = factory.openSession();
                Transaction t = session.beginTransaction();
                session.saveOrUpdate(foo);  //Utiliser merge() si "foo" pourrait avoir été chargé précédement
                t.commit();
                session.close(); Encore une fois, Hibernate vérifiera la version des instances devant être actualisées durant le flush().             Une exception sera lancée si des conflits sont détectés.
    Vous pouvez également utiliser lock() au lieu de update() et              utiliser le mode LockMode.READ (qui lancera une vérification de version, en ignorant tous les niveaux de mémoire cache) si vous êtes             certain que l'objet n'a pas été modifié.         
    
    Lien pr plus d'infos :
    http://www.hibernate.org/hib_docs/v3/reference/fr/html/transactions.html#transactions-optimistic-detached
    Ms qd j'utilise le merge(), j'ai toujours un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    failed to lazily initialize a collection of role
    J'ai bien reussi a re-lier une session a mon objet mais je sais pas si c'est correctement fait ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     // Ouvre une nouvelle session
     s = HibernateUtil.getCurrentSession();
     
     // Maj de l'objet -> (verifier si il a ete supprimer entre tps)
     s.refresh(this);
     
    // Ensuite, je peux utiliser mes accesseurs pour peupler mes collections
    ...
    Qu'est ce que vous en penser ... merci pr votre aider

Discussions similaires

  1. Réponses: 13
    Dernier message: 01/03/2011, 17h12
  2. [Hibernate] illegally attempted to associate a proxy with two open Sessions
    Par NeoKript dans le forum Persistance des données
    Réponses: 7
    Dernier message: 23/11/2010, 22h40
  3. Réponses: 0
    Dernier message: 07/10/2009, 17h31
  4. Réponses: 1
    Dernier message: 23/03/2009, 11h20

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