[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:
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:
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:
Citation:
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:
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