Bonjour,
Dans un modèle objets j'ai les relations suivantes :
Correspondant (Object) -> MessageCounter(Object)
Tout fonctionne correctement.
Je viens de modifier ce modèle comme suit :
Correspondant (Object) -> MessageCounter(Object)-> MissingMessages (HashMap)
Le fait d'avoir ajouter une HashMap (missingMessages) dans MessageCounter me pose deux problèmes :
Le premier : lorsque j'effectue un "left join fetch de MissingMessages" j'obtiens l'exception suivante :
Code:
java.lang.NullPointerException
at org.hibernate.loader.BasicLoader.isBag(BasicLoader.java:71)
at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:53)
at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:101)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:181)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:837)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:835)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:827)
En cherchant, je trouve le second problème :
Au début de mon test, je persiste un objet correspondant qui devrait normalement persister la HashMap (cascade=all ou bien cascade = delete, persist), mais au final la table associée à la HashMap reste vide.
Il s'agit peut-être d'une erreur de mapping de ma part. Je joins le mapping à ce post.
Si vous avez des idées ou des suggestions sur la manière de résoudre ce problème je vous en remercie.
Pascal Goron.
Contexte : Spring 2.0, hibernate 3.2.cr4, XDoclet, Java 1.5
Ci-joint le mapping de la HashMap :
Code:
/**
* @hibernate.map table = "MSGCNT_MISSINGMSG" cascade="all"
* @hibernate.key column="MessageCounterId" not-null="true"
* @hibernate.index column="csnumber" type="long"
* @hibernate.element column="timer" type="long"
*
* @return missingMessages
*/
public Map<Long, Long> getMissingMessages() {
return this.missingMessages;
}
La table MSGCNT_MISSINGMSG est correctement créée en base avec 3 colonnes MessageCounterId, CsNumber, Timer (Les contraintes sont OK)