IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NHibernate Discussion :

[NHibernate] NHibernate.MappingException Cast impossible


Sujet :

NHibernate

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [NHibernate] NHibernate.MappingException Cast impossible
    Bonjour,
    Je travaille actuellement sur un projet s'appuyant sur NHibernate. Je rencontre un problème avec la représentation (le mapping) d'une relation de type 0,n <-> 0,n.

    J'ai créé dans ma base un jeu de trois tables:
    -Cegid.Softwares {Id,Label}
    -Cegid.SoftwareToFlow {Id,SoftwareId,FlowId}
    -dbo.FluxImport {Id,Name,....}
    Ainsi que les classes correspondantes


    Voici les fichiers de mapping correspondantes:
    -Software.cs -> Cegid.Softwares
    -DataFlow.cs -> dbo.FluxImport


    Software:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XXX.NHibernate"
    									 namespace="XXX.NHibernate.Accounts"
    									 default-access="field.camelcase-underscore" schema="[XXXXXXXX].Cegid">
    	<class name="Software" batch-size="50" table="Softwares">
    		<id name="Id" column="Id" type="System.Int32">
    			<generator class="native" />
    		</id>
     
    		<property name="Label" column="Label" type="String" not-null="true" />
     
    		<set name="Flows" table ="SoftwareToFlow" lazy="true">
    			<key column="SoftwareId"/>
    			<many-to-many class="XXX.XXX.XXX.DataFlow" column="FlowId" outer-join="true"/>
    		</set>		
     
    	</class>
    </hibernate-mapping>

    DataFlow:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XXX.NHibernate"
    									 namespace="XXX.NHibernate.DataFlows"
    									 default-access="field.camelcase-underscore">
    	<class name="DataFlow" batch-size="50" lazy="true" table="FluxImport">
    		<id name="Id" column="IdFluxImport" type="System.Guid">
    			<generator class="assigned" />
    		</id>
     
    		<property name="Name" column="CompteFTP" type="String" not-null="true" />
    		<property name="UpdateZipCodeFromGeocoding" column="CorrectionCodePostalParGeocodage" type="Boolean" not-null="true" />
    	</class>
    </hibernate-mapping>


    Lorsque je tente de réaliser une requête, je rencontre l'erreur suivante:

    failed: NHibernate.MappingException : Invalid mapping information specified for type Pjpa.NHibernate.Accounts.Software, check your mapping file for property type mismatches
    ----> System.InvalidCastException : Impossible d'effectuer un cast d'un objet de type 'NHibernate.Collection.PersistentSet' en type 'Pjpa.NHibernate.DataFlows.DataFlow'.
    à NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues(Object obj, Object[] values)
    à NHibernate.Impl.SessionImpl.InitializeEntity(Object obj)
    à NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session)
    à NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
    à NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
    à NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
    à NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet querySpaces, IType[] resultTypes)
    à NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList results)
    à NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria)
    à NHibernate.Impl.CriteriaImpl.UniqueResult[T]()
    C:\bo\trunk\Framework\PJPA.NHibernate.Tests\Explicit\ExplicitFixture.cs(157,0): à Pjpa.NHibernate.Explicit.ExplicitFixture.LoadType[T,U](ISession session)
    C:\bo\trunk\Framework\PJPA.NHibernate.Tests\Explicit\ExplicitFixture.cs(81,0): à Pjpa.NHibernate.Explicit.ExplicitFixture.Query()
    --InvalidCastException
    à (Object , Object[] , SetterCallback )
    à NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues(Object target, Object[] values)
    à NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues(Object obj, Object[] values)

    J'ai tenté de modifier mes fichiers de mapping et l'erreur vient du nœud:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		<set name="Flows" table ="SoftwareToFlow" lazy="true">
    			<key column="SoftwareId"/>
    			<many-to-many class="XXX.NHibernate.DataFlows.DataFlow" column="FlowId" outer-join="true"/>
    		</set>

    Si vous pouviez me fournir quelques pistes pour venir à bout de mon erreur.
    Je vous remercie d'avance de votre attention.

    Harmelyo

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bien finalement j'ai trouvé une solution qui répond à mes attentes. Je suis tout d'abord passé par un changement de ma classe "Software" et son fichier de mapping.

    Dans le fichier classe, j'ai préféré le type IList <DataFlow> au tableau de DataFlow.

    Toutefois je pense que la solution est plutôt ici:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bag name="Flow" cascade="none" table="SoftwareToFlow">
    	<key column="SoftwareId"/>
    	<many-to-many class="Pjpa.NHibernate.DataFlows.DataFlow" column="FlowId"/>
    </bag>

    Ce noeud remplace celui que mes tests incriminaient. Enfin même si cela reste un peu brouillon dans ma tête et donc surement dans mes explications, j'espère que cela évitera des arrachages de cheveux à d'autres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CAST impossible?! mot3
    Par Sergejack dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/06/2010, 09h51
  2. requete oledb, cast impossible ?
    Par dudule dans le forum VB.NET
    Réponses: 7
    Dernier message: 26/09/2008, 09h15
  3. Réponses: 2
    Dernier message: 07/03/2007, 14h27
  4. [NHibernate]NHibernate Mapping Attributes
    Par benny7 dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/08/2006, 12h57
  5. CAST impossible
    Par inertia dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2005, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo