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

Spring Java Discussion :

Problème de lazy avec hibernate et Spring


Sujet :

Spring Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème de lazy avec hibernate et Spring
    Bonjour à tous.

    Je suis en train de débuter dans le développement web en J2EE et j'ai décidé de créer une application toute bête pour me permettre de mieux comprendre les concepts et les détails techniques.

    J'ai une base de données mySQL qui contient une seule table "Customer" toute simple avec trois colonnes "ID"(int), "NAME"(string) et "ACCOUNT"(int).

    J'ai choisi d'appliquer une architecture 3 tiers avec une couche web (qui utilise struts), une couche métier et une couche d'accès aux données(qui utilise hibernate). Ici on ne s'intéressera qu'aux deux dernières vu que mon problème vient de la couche d'accès aux données.

    Pour utiliser hibernate j'ai choisi d'utiliser la partie du framework spring qui lui est dédié et plus particulièrement la classe HibernateDaoSupport.
    Alors pour commencer j'ai un bean de données :

    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
    public class Customer {
     
    	private int id;
    	private String name;
    	private int account;
     
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAccount() {
    		return account;
    	}
    	public void setAccount(int account) {
    		this.account = account;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
     
    }
    Le mapping avec la bdd est défini avec un fichier hbm.xml :
    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
    <hibernate-mapping package="hibernate">
     
        <class name="com.infotel.example.dao.model.Customer" table="customer">
     
            <id name="id" type="int" unsaved-value="-1">
                <column name="customerId" />
                <generator class="increment" />
            </id>
     
            <property name="name" type="string">
                <column name="customerName" length="45" not-null="true" />
            </property>
     
            <property name="account" type="int">
                <column name="customerAccount" not-null="true" />
            </property>
     
        </class>
     
    </hibernate-mapping>
    Pour remplir les objets de type Customer j'utilise l'objet suivant qui hérite de HibernateDaoSupport et qui implémente une interface toute simple appelée ICustomerDAO (je la met pas ici, elle apporte rien de plus).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class CustomerDAOHibernate extends HibernateDaoSupport implements ICustomerDAO {
     
    	@Override
    	public Customer getCustomerById(int id) {
     
    		Customer instance = (Customer) getHibernateTemplate().load(Customer.class, id);
     
    		return instance;
    	}
    }
    Enfin dans la couche métier je fais appel à CustomerDAOHibernate pour obtenir des instances de ICustomer. Et c'est là que le problème apparaît. Je commence par créer une instance de ICustomer avec mon DAO.

    Customer customer = customerDAO.getCustomerById(id);

    Puis, 2 lignes plus loin, quand j'essaie de récupérer le contennu de mon objet Customer avec cette ligne :

    customer.getAccount();

    Il me renvoie une erreur LazyInitializationException: could not initialize proxy - the owning Session was closed
    Apparemment la session est fermée au moment où j'appelle getAccount() mais je trouve ça bizarre vu qu'elle est présente deux lignes plus haut dans le getCustomerById().

    J'ai vu pas mal de choses en cherchant sur le net qui parlaient d'Interceptors ou de Transaction managers mais je n'ai rien trouvé qui puisse m'expliquer clairement 1) Pourquoi ma session disparait tout d'un coup 2) Comment régler le problème simplement tout en gardant la propriété "lazy".

    Si quelqu'un a une bonne expérience en hibernate intégré dans Spring j'aimerais bien avoir son avis.
    Dernière modification par Robin56 ; 05/08/2013 à 21h15. Motif: Ajout du préfixe

Discussions similaires

  1. Problème d'initialisation avec Hibernate
    Par fabou3377 dans le forum NetBeans
    Réponses: 3
    Dernier message: 03/04/2009, 06h41
  2. problème de supression avec Hibernate
    Par ygrim dans le forum Hibernate
    Réponses: 5
    Dernier message: 30/01/2008, 17h16
  3. Problème requete SQL avec hibernate
    Par kakahn dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/01/2008, 12h08
  4. Problème de synchronisation avec Hibernate
    Par toutoune60 dans le forum JSF
    Réponses: 2
    Dernier message: 15/04/2007, 12h27
  5. Problème de connection avec Hibernate Synchronizer
    Par ouzzine dans le forum Hibernate
    Réponses: 8
    Dernier message: 30/11/2006, 13h51

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