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.  [ 2 posts ] 
Author Message
 Post subject: Liens logiques entre deux tables
PostPosted: Wed May 31, 2006 11:11 am 
Newbie

Joined: Wed May 31, 2006 10:22 am
Posts: 2
Location: France
hibernate : 3.1.1
ORACLE : 10g
WSAD:5.1.2


J'ai un problème de consultation d'une table "mutualisée"(RF_CODIF) pour le stockage de toutes les codifications de l'application en développemnt.
En effet, cette table possède une clé composée: (CD_TYP_CODIF et CD_CODIF) et les tables applicatives utilisant toutes types de codification ne contiennent qu'une colonne(par codification) :
Exemple : table TIE_PM(Tiers personne Morale) contenant la colonne CD_NATIONALITE qui pour récupérer le libellé de la codification de la table susvisée(RF_CODIF), on y accède en faisant le lien sur :
TIE_PM.CD_NATIONALITE = RF_CODIF.CD_CODIF
et RF_CODIF='NATION' : définition du concept de lien(ou relation) logique entre deux entités.

Le seul problème c'est qu'en appliquant le mapping (avec un descriminator-value) et la définition de classe codifObject ci-dessous, HIBERNATE "rale" dans le cas où pour une occurrence d'une table donnée, il existe deux codifications qui ont la même valeur mais qui correspondent à deux types de codifications différentes.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="fr.caleasing.bt.model.codifobject">
<class name="CodifObject" table="RF_CODIF">
<id name="code" column="CD_CODIF" />
<discriminator column="CD_TYP_CODIF" type="string" insert="false"/>
<property name="libelle" column="LIB_CODIF" />
<property name="flag" column="FLAG_ACTIF" />
<subclass name="Type" extends="CodifObject" discriminator-value="TYPE" />
<subclass name="Civilite" extends="CodifObject" discriminator-value="CIVI" />
<subclass name="Statut" extends="CodifObject" discriminator-value="STATUT" />
<subclass name="NatureCorrespondant" extends="CodifObject" discriminator-value="NATCOR" />
<subclass name="TypeVoie" extends="CodifObject" discriminator-value="TYPVOI" />
<subclass name="Extension" extends="CodifObject" discriminator-value="EXTVOI" />
<subclass name="Departement" extends="CodifObject" discriminator-value="DEPT" />
<subclass name="ApeNAF" extends="CodifObject" discriminator-value="NAF" />
<subclass name="BAFI" extends="CodifObject" discriminator-value="BAFI" />
<subclass name="ConsolidComptable" extends="CodifObject" discriminator-value="CCPT" />
<subclass name="CSP" extends="CodifObject" discriminator-value="CSP" />
<subclass name="EtatSIREN" extends="CodifObject" discriminator-value="ETASIR" />
<subclass name="FormeJuridique" extends="CodifObject" discriminator-value="CINS" />
<subclass name="Groupe" extends="CodifObject" discriminator-value="GRPE" />
<subclass name="IndicEvt" extends="CodifObject" discriminator-value="INDEVT" />
<subclass name="IndicTerritoire" extends="CodifObject" discriminator-value="TERR" />
<subclass name="Langue" extends="CodifObject" discriminator-value="LANG" />
<subclass name="Nationalite" extends="CodifObject" discriminator-value="NATION" />
<subclass name="NatureTiers" extends="CodifObject" discriminator-value="NATTIE" />
<subclass name="OrigApe" extends="CodifObject" discriminator-value="ORIAPP" />
<subclass name="Perimetre" extends="CodifObject" discriminator-value="PERIM" />
<subclass name="RegimeMatrim" extends="CodifObject" discriminator-value="RMA" />
<subclass name="RegimeTVA" extends="CodifObject" discriminator-value="REGTVA" />
<subclass name="Sexe" extends="CodifObject" discriminator-value="SEXE" />
<subclass name="MotifInterdRole" extends="CodifObject" discriminator-value="INTROL" />
<subclass name="SituationFamille" extends="CodifObject" discriminator-value="SMA" />
<subclass name="SourceInfo" extends="CodifObject" discriminator-value="SRCINF" />
<subclass name="StatutRisque" extends="CodifObject" discriminator-value="STARSQ" />
<subclass name="TypeActeur" extends="CodifObject" discriminator-value="TYPACT" />
<subclass name="Metier" extends="CodifObject" discriminator-value="METI" />
<subclass name="DelegAppo" extends="CodifObject" discriminator-value="DELG" />
<subclass name="ThemeComment" extends="CodifObject" discriminator-value="THEME" />
<subclass name="FamilleAppo" extends="CodifObject" discriminator-value="FAMAPP" />
<subclass name="NatureProsp" discriminator-value="NATPRO" />
<subclass name="TypeProc" extends="CodifObject" discriminator-value="TYPROC" />
<subclass name="FctDir" extends="CodifObject" discriminator-value="FCTDIR" />
<subclass name="TypeTribunal" extends="CodifObject" discriminator-value="TRIB" />
<subclass name="Profession" extends="CodifObject" discriminator-value="PRO" />
<subclass name="TypeAcceptant" extends="CodifObject" discriminator-value="CACC" />
<subclass name="TypeAgrement" extends="CodifObject" discriminator-value="TAGREF" />
<subclass name="OrigRelation" extends="CodifObject" discriminator-value="ORIAPP" />
</class>
</hibernate-mapping>

********* Classe codifObject

package fr.caleasing.bt.model.codifobject;

import java.io.Serializable;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import fr.caleasing.bt.model.BaseObject;

/**
*/
public class CodifObject extends BaseObject implements Serializable {

private String code;
private String type;
private String libelle;
private String flag;

public static final String TYPE_CODIF = "";

public CodifObject(){};

public String getCode() {
return code;
}

public String getLibelle() {
return libelle;
}

public String getType() {
return type;
}

public String getFlag() {
return flag;
}

public void setCode(String code) {
this.code = code;
}

public void setLibelle(String libelle) {
this.libelle = libelle;
}

public void setType(String type) {
this.type = type;
}

public void setFlag(String flag) {
this.flag = flag;
}

public String toString() {
return ToStringBuilder.reflectionToString(ToStringStyle.MULTI_LINE_STYLE);
}

public boolean equals(Object o) {
boolean result = false;

if (o == this) {
result = true;
}
else if (o instanceof CodifObject) {
if (getCode().equals(((CodifObject) o).getCode()) && getType().equals(((CodifObject) o).getType())) {
result = true;
}
}

return result;
}

public int hashCode() {
return getCode().hashCode();
}
}


********* Message Erreur

[31/05/06 16:53:41:489 CEST] 19851109 WebGroup E SRVE0026E: [Erreur de servlet]-[exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of fr.caleasing.bt.model.roles.RoleTiers.setStatut; nested exception is org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of fr.caleasing.bt.model.roles.RoleTiers.setStatut]: org.springframework.orm.hibernate3.HibernateSystemException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of fr.caleasing.bt.model.roles.RoleTiers.setStatut; nested exception is org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of fr.caleasing.bt.model.roles.RoleTiers.setStatut
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of fr.caleasing.bt.model.roles.RoleTiers.setStatut
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java(Inlined Compiled Code))
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java(Compiled Code))
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java(Compiled Code))
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java(Compiled Code))
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java(Compiled Code))
at org.hibernate.loader.Loader.doQuery(Loader.java(Compiled Code))
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2150)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:300)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1127)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:807)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:356)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:798)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:790)
at fr.caleasing.bt.dao.roles.hibernate.RolesDAOHibernate.getListeRoles(RolesDAOHibernate.java:43)
at fr.caleasing.bt.service.roles.impl.RoleServiceImpl.getListeRoles(RoleServiceImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy5.getListeRoles(Unknown Source)
at fr.caleasing.bt.web.action.GestionRolesAction.loadRoles(GestionRolesAction.java:825)
at fr.caleasing.bt.web.action.GestionRolesAction.view(GestionRolesAction.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
at fr.caleasing.bt.web.action.BaseAction.execute(BaseAction.java:175)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
Caused by: net.sf.cglib.beans.BulkBeanException: fr.caleasing.bt.model.codifobject.MotifInterdRole
at fr.caleasing.bt.model.roles.RoleTiers$$BulkBeanByCGLIB$$eefe7481.setPropertyValues(<generated>)
... 71 more
Caused by: java.lang.ClassCastException: fr.caleasing.bt.model.codifobject.MotifInterdRole
... 72 more


Pour ce cas de figure, on a un rôle tiers qui se présente comme suit :

ID_TIERS = XXXXXXX
CD_TYP_ROLE = 'APPO'(apporteur)
CD_MOTIF_INTERD = 'INAC'(inactif pour type de codification 'INTROL')
DT_INTERD_ROLE = DD/MM/YYYY
ID_USER_CREAT = XXXXXXXXXXX
DT_CREAT=DD/MM/YYYY
ID_USER_DERN_MAJ = XXXXXXXXXXX
DT_DERN_MAJ=DD/MM/YYYY
CD_STATUT='INAC'(inactif pour type de codification 'STATUT')

Le problème émmane du fait que la même valeur(INAC) figure sur le même enregistrement(classe) pour deux types de codifications différentes.

Si quelqu'un a été amené à traduire un lien logique dans un mapping hibernate, je lui remercie de me conseiller sa solution.

P.S: je suis à l'écoute de toute demande de renseignement complémentaire.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 08, 2006 4:48 am 
Newbie

Joined: Thu Jun 08, 2006 4:34 am
Posts: 1
bonjour,

avez-vous réussi à modifier ce paramètre de configuration ?

hibernate.cglib.use_reflection_optimizer=false

Peut-être avez-vous résolu votre problème ? Pourrais-je en savoir un peu plus dans ce cas ?

J'ai un problème similaire avec hibernate 3.1, j'essaie de faire l'exemple de base donné dans l'introduction à hibernate (http://www.hibernate.org/hib_docs/v3/re ... orial.html), et arrivé à l'étape concernant le code suivant :
Code:
else if (args[0].equals("addpersontoevent")) {
    Long eventId = mgr.createAndStoreEvent("My Event", new Date());
    Long personId = mgr.createAndStorePerson("Foo", "Bar");
    mgr.addPersonToEvent(personId, eventId);
    System.out.println("Added person " + personId + " to event " + eventId);


j'ai une exception :
Code:
     [java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, null)
     [java] Hibernate: call identity()
     [java] Hibernate: insert into PERSON (age, firstname, lastname, PERSON_ID) values (?, ?, ?, null)
     [java] Hibernate: call identity()
     [java] mgr.addPersonToEvent(1, 1);
     [java] Hibernate: select person0_.PERSON_ID as PERSON1_1_0_, person0_.age as age1_0_, person0_.firstname as firstname1_0_, person0_.lastname as lastname1_0_ from PERSON person0_ where person0_.PERSON_ID=?
     [java] 10:28:35,303  INFO DefaultLoadEventListener:95 - Error performing load command
     [java] org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of events.Person.setEvents
     [java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:215)
     [java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:185)
     [java] at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3232)
     [java] at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
     [java] at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
     [java] at org.hibernate.loader.Loader.doQuery(Loader.java:717)
     [java] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
     [java] at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
     [java] at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:47)
     [java] at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:41)
     [java] at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)
     [java] at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
     [java] at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
     [java] at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
     [java] at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:82)
     [java] at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
     [java] at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:820)
     [java] at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:62)
     [java] at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
     [java] at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
     [java] at events.Person$$EnhancerByCGLIB$$8c2329c4.getEvents(<generated>)
     [java] at events.EventManager.addPersonToEvent(Unknown Source)
     [java] at events.EventManager.main(Unknown Source)
     [java] Caused by: net.sf.cglib.beans.BulkBeanException: org.hibernate.collection.PersistentSet
     [java] at events.Person$$BulkBeanByCGLIB$$9cc73aea.setPropertyValues(<generated>)
     [java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:212)
     [java] ... 22 more
     [java] Caused by: java.lang.ClassCastException: org.hibernate.collection.PersistentSet
     [java] ... 24 more


Je pensais tout d'abord que cela pouvait venir du fait que la variable age de la classe Person n'etait pas initialisée, selon ce que j'ai pu lire dans des forums, mais en la settant avec une valeur par défaut dans la classe ou avec le setteur classique, j'ai la même exception.

Voici mon EventManager :

Code:
//...
public class EventManager {

    public static void main(String[] args) {
        EventManager mgr = new EventManager();

        if (args[0].equals("store")) {
            mgr.createAndStoreEvent("My Event", new Date());
        }
        //...
        else if (args[0].equals("addpersontoevent")) {
            Long eventId = mgr.createAndStoreEvent("My Event", new Date());
            Long personId = mgr.createAndStorePerson("Foo", "Bar");
            System.out.println("mgr.addPersonToEvent(" + personId + ", " + eventId + ");");
            mgr.addPersonToEvent(personId, eventId);
            System.out.println("Added person " + personId + " to event " + eventId);
        }

        HibernateUtil.getSessionFactory().close();
    }

    private Long createAndStoreEvent(String title, Date theDate) {
        //...
    }

    private Long createAndStorePerson(String firstName, String lastName) {
        //...
    }

    private List listEvents() {
        //...
    }

    private void addPersonToEvent(Long personId, Long eventId) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        //mon problème est ici
        Person aPerson = (Person) session.load(Person.class, personId);
        Event anEvent = (Event) session.load(Event.class, eventId);

        aPerson.getEvents().add(anEvent);

        session.getTransaction().commit();
    }
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 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.