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:
J'ai tenté de modifier mes fichiers de mapping et l'erreur vient du nœud: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)
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
Partager