Bonjour à tous,

j'ai un problème avec Hibernate qui me donne la trace 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
CAUSE: java.lang.NullPointerException
                                 java.lang.NullPointerException
	at org.hibernate.type.LongType.next(LongType.java:54)
	at org.hibernate.engine.Versioning.increment(Versioning.java:25)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:262)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java(Compiled Code))
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java(Compiled Code))
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70)
	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:39)
	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:711)
	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1409)
	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:603)
	at ch.gma.contrat.offre.persistence.dao.OffreHibernateDao.findCompteurById(OffreHibernateDao.java:942)
La plupart du temps, la méthode findCompteurById se termine correctement et que pour certains paramètres (toujours les mêmes) une exception est levée.

Voici la requête SQL qui est appelée lorsque l'exception est levée (sur une base de données Oracle) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
    StringBuffer select = new StringBuffer("SELECT SUM(NBCOMPTEURREEL) AS CPTREEL ");
    select.append("FROM DISTRIBUTION ");
    select.append("WHERE IDR = " + idR.toString() + " ");
    select.append("AND IDSECT = " + idSect.toString() + " ");
    select.append("AND (FIN IS NULL OR ");
    select.append("     EXTRACT(YEAR FROM DTDIGRFIN) = " + today.get(Calendar.YEAR) + ")");
 
    Long result = (Long) getSession().createSQLQuery(select.toString()).addScalar("CPTREEL", Hibernate.LONG).uniqueResult();
Ce que je ne comprends pas c'est que la même requête passe toujours, même avec les arguments qui lèvent une exception, lorsque je fais une requête interactive avec Toad sur la base de données.

Est-ce que quelqu'un aurait une idée ?



A plus