2016-02-10 1 views
0

J'essaye d'établir une connexion de base de données par Hibernate (je suis débutant dans cette technologie). Néanmoins, je reçois l'exception suivante lorsque je crée une instance de la classe ProspectStatusDao, tous les détails de l'implémentation (les fichiers de configuration XML et les classes java) sont ci-dessous. Je vous remercie de votre aide vraiment:Obtenir failed.org.hibernate.MappingException en essayant d'obtenir une session d'usine

public static void main(String[] args) throws MalformedURLException { 

    ProspectStatusDao p = new ProspectStatusDao(); 
    p.getProspectStatus(26); 

}


Exception: Initial SessionFactory creation  failed.org.hibernate.MappingException: could not determine type nullException in thread "main" java.lang.NullPointerException 
at com.posadas.referidos.dao.ProspectStatusDao.getProspectStatus(ProspectStatusDao.java:50) 

at demo.spring.client.Client.main(Client.java:30) 

------------------------ --hibernate.cfg.xml -------------------------------------

<hibernate-configuration> 
<session-factory> 
    <!-- SQL Dialect --> 
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> 
    <!-- Database connection settings --> 
    <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> 
    <property name="hibernate.connection.url"></property> 
    <property name="hibernate.connection.username"></property> 
    <property name="hibernate.connection.password"></property> 
    <!-- JDBC connection pool --> 
    <property name="hibernate.connection.pool_size">200</property> 
    <property name="hibernate.show_sql">false</property> 
    <property name="hibernate.format_sql">true</property> 
    <!-- Bind the getCurrentSession() method to the thread. --> 
    <property name="current_session_context_class">thread</property> 
     <mapping resource="com/posadas/referidos/model/queries/queryProspect.hbm.xml" /> 
</session-factory> 
</hibernate-configuration> 

-------------------------- hbm.xml ------------------ -------------

<sql-query name="queryProspectStatus"> 
    <return-scalar column="ReferredID" type="java.lang.Integer" /> 
    <return-scalar column="FirstName" type="java.lang.String" /> 
    <return-scalar column="LastName" type="java.lang.String" /> 
    <return-scalar column="StatusID" type="java.lang.Integer" /> 
    <return-scalar column="Concept" type="java.lang.String" /> 

<![CDATA[ 
    SELECT dbo.Referred.ReferredID, dbo.t_Prospect.FirstName, dbo.t_Prospect.LastName, 
    dbo.Referred.StatusID, dbo.Referred_Status.Concept 
    FROM dbo.Referred INNER JOIN dbo.t_Prospect ON dbo.Referred.prospectID = dbo.t_Prospect.ProspectID 
    INNER JOIN dbo.Referred_Status ON dbo.Referred_Status.StatusID = dbo.Referred.StatusID 
    WHERE dbo.Referred.ReferredID = :referredId 
]]> 

</sql-query> 

----------------------- classe Hibernate Util -------------- -------------------------------------------------- ---------------

import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 


public class HibernateUtil { 

private static SessionFactory sessionFactory; 

private static SessionFactory buildSessionFactory() { 

    try { 

     // Create the SessionFactory from hibernate.cfg.xml 
     Configuration configuration = new Configuration().configure(); 
     ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). 
       applySettings(configuration.getProperties()).build(); 
     return configuration.buildSessionFactory(serviceRegistry); 

    } catch(Throwable ex) { 

     System.out.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 

    if (null == sessionFactory) 
     sessionFactory = buildSessionFactory(); 

    return sessionFactory; 
} 

}

----------------------- Classe DAO ------------------------------------------------ ----------------------------------------

import java.util.List; 

import org.hibernate.Query; 
import org.hibernate.Session; 

import com.posadas.referidos.to.ProspectStatusTO; 
import com.posadas.referidos.util.HibernateUtil; 
/** 
    * @author r.gonzalez.arellano 
    * 
*/ 
public class ProspectStatusDao { 

private Session sessionSQL; 

private void openConnectionSQL(){ 
    sessionSQL = HibernateUtil.getSessionFactory().getCurrentSession(); 
} 

//public List<ProspectStatusTO> getProspectStatus(ProspectStatusTO objTO){ 
public void getProspectStatus(int referredId){ 

    //List<ProspectStatusTO> lista = new ArrayList<ProspectStatusTO>(); 

    try{ 
     openConnectionSQL(); 
     Query queryProspectStatus = sessionSQL.getNamedQuery("queryProspectStatus"); 
     queryProspectStatus.setParameter("referredId", referredId); 

     List resultado = queryProspectStatus.list(); 
     ProspectStatusTO prospectStatusTo = null; 

     for(Object object:resultado){ 
      Object[] obj =(Object[]) object; 
      prospectStatusTo = new ProspectStatusTO(); 
      prospectStatusTo.setReferredId(obj[0]==null?0:Integer.parseInt(obj[0].toString())); 
      prospectStatusTo.setLastName(obj[1]==null?"":obj[1].toString()); 
      prospectStatusTo.setFirstName(obj[2]==null?"":obj[2].toString()); 
      prospectStatusTo.setStatusId(obj[3]==null?0:Integer.parseInt(obj[3].toString())); 
      prospectStatusTo.setStatusConcept(obj[4]==null?"":obj[4].toString()); 
     } 

     System.out.println(prospectStatusTo); 

    }catch(Exception e){ 
    }finally{ 
     sessionSQL.close(); 
    } 

    //return lista; 
} 

}

+0

Quel est le contenu de la ligne sur ProspectStatusDao.java:50? – yugo

+0

est exactement cette ligne: sessionSQL.close(); – fabiang81

Répondre

1

Exception: Initial SessionFactory creation failed.org.hibernate.MappingException: could not determine type null

Cela signifie que vous avez des erreurs dans le queryProspect.hbm.xml.

Le problème peut être que vous n'utilisez pas d'alias.

Si vous utilisez cette

<return-scalar column="ReferredID" type="java.lang.Integer" />

vous devez avoir un alias ReferredID dans le SQL

SELECT dbo.Referred.ReferredID AS ReferredID, ...

similaires avec d'autres colonnes.

+0

J'ignorais que je devais créer une classe d'entité pour la table t_Prospect, puisque nous construisons notre projet avec des annotations Hibernate (mélangées avec des fichiers hbm pour définir les requêtes).J'ai supprimé tout le mappage de la colonne () dans le fichier hbm.xml, créé une nouvelle classe Prospect.java, puis l'instance de session a fonctionné correctement. – fabiang81

+0

@ fabiang81 Vous pouvez utiliser l'annotation @ @ NamedNativeQuery pour SQL. –

0

Vous ignorez une exception réelle dans le bloc catch vide. Cela pourrait être une exception dans le openConnectionSQL();.

sessionSQl est null et vous ne pouvez pas le fermer. Ajouter e.printStackTrace() pour voir ce qui est vrai problème

}catch(Exception e){ 
    e.printStackTrace(); 
}finally{ 
    sessionSQL.close(); 
} 
+0

Sa gestion incorrecte des exceptions aide un peu. Et il est nécessaire de vérifier 'sessionSQL' pour' null'. –