-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: "loader query" et NullPointerException
PostPosted: Wed Jul 08, 2009 3:34 am 
Beginner
Beginner

Joined: Fri May 23, 2008 4:37 am
Posts: 25
Bonjour à tous,

Je tente d'utiliser une query pour charger une collection dans une de mes classes. Pour ce faire j'ai définis ma query et je l'ai indiquée dans la balise <loader> de ma collection.
Malheureusement, lorsque hibernate démarre, j'obtiens une NullPointerException.

Voici mon mapping :
Code:
<joined-subclass name="be.me.Teacher" extends="be.me.User">
      <key column="uid" />
   
      <bag name="classes" lazy="false" table="teachers_courses_classes">
         <key column="teacher" />         
         <many-to-many column="class" unique="true"
            class="be.me.SchoolClass" />
         <loader query-ref="classes"/>
      </bag>
   
   </joined-subclass>
   
   <sql-query name="classes">
      <load-collection alias="classes" role="be.me.Teacher.classes" />
      SELECT DISTINCT {classes.*}
      FROM classes
         LEFT JOIN teachers_courses_classes ON teachers_courses_classes.class=classes.id
      WHERE teachers_courses_classes.teacher=:id
   </sql-query>


Et mon exception :
Code:
Caused by: java.lang.NullPointerException
   at org.hibernate.loader.custom.sql.SQLQueryParser.resolveProperties(SQLQueryParser.java:205)
   at org.hibernate.loader.custom.sql.SQLQueryParser.resolveCollectionProperties(SQLQueryParser.java:158)
   at org.hibernate.loader.custom.sql.SQLQueryParser.substituteBrackets(SQLQueryParser.java:121)
   at org.hibernate.loader.custom.sql.SQLQueryParser.process(SQLQueryParser.java:74)
   at org.hibernate.loader.custom.sql.SQLCustomQuery.<init>(SQLCustomQuery.java:133)
   at org.hibernate.engine.query.NativeSQLQueryPlan.<init>(NativeSQLQueryPlan.java:67)
   at org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:136)
   at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:476)
   at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:384)
   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
   at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
   at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
   at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
   ... 39 more


Etant donné que c'est la première fois que je tente d'utiliser une query personnalisée pour le chargement je suis assez perdu face à cette exception. De plus la trace ne m'aide pas beaucoup.


L'un d'entre vous peut-il m'aider ? Merci


Top
 Profile  
 
 Post subject: Re: "loader query" et NullPointerException
PostPosted: Wed Jul 08, 2009 8:59 am 
Regular
Regular

Joined: Mon Apr 19, 2004 6:54 pm
Posts: 79
Essai d'utiliser des alias:
Code:
<sql-query name="classes">
      <load-collection alias="cl" role="be.me.Teacher.classes" />
      SELECT DISTINCT {cl.*}
      FROM classes cl
         LEFT JOIN teachers_courses_classes course ON course.class=cl.id
      WHERE course.teacher=:id
</sql-query>


et peut être utiliser '?' a la place de ':id'

Christophe


Top
 Profile  
 
 Post subject: Re: "loader query" et NullPointerException
PostPosted: Wed Jul 08, 2009 10:09 am 
Beginner
Beginner

Joined: Fri May 23, 2008 4:37 am
Posts: 25
Celà n'a rien changé...

Entre temps, j'ai récupéré les sources et j'ai pu déterminer la source de l'exception :
Elle ce produit sur la ligne "return persister.selectFragment( aliasName, suffix );" car persister est null.
Code:
SQLLoadable persister = context.getEntityPersisterByAlias( aliasName );
      String suffix = context.getEntitySuffixByAlias( aliasName );

      if ( "*".equals( propertyName ) ) {
         if( !fieldResults.isEmpty() ) {
            throw new QueryException("Using return-propertys together with * syntax is not supported.");
         }         
         aliasesFound++;
         return persister.selectFragment( aliasName, suffix );
      }


Je connais maintenant la source mais je ne connais pas la cause :
- Pourquoi est-ce que l'instance de SQLLoadable est nulle ? Dois-je renseigner un élément supplémentaire dans ma configuration ? Peut-être que ce seras plus clair pour l'un d'entre vous..


Merci


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.