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 :

Où instancier le SessionFactory ?


Sujet :

Hibernate Java

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut Où instancier le SessionFactory ?
    Bonjour à tous ,

    il y a un moment (2013) j'avais fait un projet avec Hibernate 2 ou 3 et je voulais réessayer cette semaine avec une version plus récente.

    J'ai un problème de NullPointerException lorsque je lance mon programme. En règle général je sais régler cette Exception mais, dans ce cas précis, je ne sais pas quelle est la meilleure marche à suivre avec le SessionFactory.

    Dans mon projet, j'ai la structure suivante :

    un classe AdresseDAO :
    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
     
    public class AdresseDao extends AbstractDaoHibernate implements IAdresseDao{
     
    	public void creerAdresse(Adresse adresse) {
    		try{
    			Session session = getSession();
     
    			session.save(adresse);
    		} catch (HibernateException he){
    			throw he;
    		}
    	}
     
    	[...]
    }
    qui hérite de ma classe AbstractDaoHibernate suivante :

    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
     
    public class AbstractDaoHibernate {
     
        @Resource(name="sessionFactory")
        private SessionFactory sessionFactory;
     
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
     
        protected Session getSession() {
            Session session = sessionFactory.getCurrentSession();
            return session;
        }
    }
    et mon main pour le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class TestMain {
     
    	public static void main(String[] args) {
     
    		AdresseService adresseService = new AdresseServiceImpl();
     
    		adresseService.creerAdresse(new Adresse("rue", "codep", "ville", "pays"));
     
    	}
     
    }
    Le NullPointerException survient dans ma classe AbstractDaoHibernate, dans la méthode getSession(...). Evidemment puisque je n'ai pas instancié la sessionFactory.

    Mes questions sont : Où dois-je instancier cette SessionFactory et dois-je le faire plusieurs fois où une seule fois ?

    Merci d'avance =D bonne soirée

  2. #2
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Slt,
    As tu un fichier de conf hibernate? ou es tu en full annotation?
    Tu utilises @Resource => référence à bean spring?

    Dans tout les cas tu doit avoir les propriétés de connexion à ta bdd dans ta configuration hibernate (normalement définie par @Resource) .


    ++

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Bonjour
    merci pour ta réponse.

    Oui, j'ai un fichier hibernate.cfg.xml.

    Depuis hier, j'ai réussi à avancer un peu. Mais je suis presque certain que ma méthode n'est vraiment pas la bonne. En fait, je créer le SessionFactory dans ma classe AdresseDao... Effectivement @Resource fait reference à Spring mais j'aimerais ne pas utiliser Spring pour le moment. Donc je ne sais toujours pas comment créer la SessionFactory pour qu'elle ne soit créer qu'une fois et pas dans chaque classe de DAO.

    J'en profite pour poser une autre question mais qui n'est pas bloquante pour moi. J'avais l'erreur suivante "Error parsing JNDI name [factory]" parce que dans mon fichier hibernate.cfg.xml, j'avais la ligne suivante : <session-factory name="factory">
    En retirant l'attribut "name", ça passe, mais je n'ai pas compris pourquoi .

    Merci d'avance pour ceux qui pourront répondre.

  4. #4
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Sans spring (donc pas d'injection), il faut que tu build ta session factory en lisant ton fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Configuration configuration = new Configuration();
                configuration.configure();// va lire le fichier hibernate.cfg.xml qui doit se trouver dans le classpath
                StandardServiceRegistryBuilder serviceRegistry= new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry.build());
                Session session = sessionFactory.openSession();
    tu mets ce code dans ton HibernateUtils

    ++

Discussions similaires

  1. [Reflection] Instancier un objet
    Par bl@st dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/10/2008, 11h09
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 15h55
  4. [Débutant(e)]servlet qui instancie une classe personelle
    Par NiBicUs dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/02/2005, 12h00
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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