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] Many-To-One génére exception


Sujet :

NHibernate

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut [NHibernate] Many-To-One génére exception
    Bonjour à tous,

    J'ai suivi, entre autre, le tuto de developpez pour me lancer sur NHibernate. Mais j'ai malheureusement un petit bug... Une exception est généré à cause d'un many-to-one

    Code : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="PamNHibernate" assembly="PamNHibernate">
    	<class name="Employe" table="EMPLOYES">
    		<id name="Id" column="ID" unsaved-value="0">
    			<generator class="native" />
    		</id>
    		<version name="Version" column="VERSION"/>
    		<property name="SS" column="SS"/>
    		<property name="Nom" column="NOM"/>
    		<property name="Prenom" column="PRENOM"/>
    		<property name="Adresse" column="ADRESSE"/>
    		<property name="Ville" column="VILLE"/>
    		<property name="CodePostal" column="CP"/>
    		<many-to-one name="Indemnites" column="INDEMNITE_ID" cascade="save-update"/>
    	</class>
    </hibernate-mapping>

    Voici la tête de l'exception


    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    NHibernate.HibernateException was caught
      Message=Creating a proxy instance failed
      Source=NHibernate
      StackTrace:
           à NHibernate.Proxy.CastleProxyFactory.GetProxy(Object id, ISessionImplementor session)
           à NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy(Object id, ISessionImplementor session)
           à NHibernate.Impl.SessionImpl.DoLoadByClass(Type clazz, Object id, Boolean checkDeleted, Boolean allowProxyCreation)
           à NHibernate.Impl.SessionImpl.InternalLoad(Type clazz, Object id, Boolean eager, Boolean isNullable)
           à NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session)
           à NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session, Object owner)
           à 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.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
           à NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet querySpaces, IType[] resultTypes)
           à NHibernate.Hql.Classic.QueryTranslator.List(ISessionImplementor session, QueryParameters queryParameters)
           à NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters, IList results)
           à NHibernate.Impl.SessionImpl.Find[T](String query, QueryParameters parameters)
           à NHibernate.Impl.QueryImpl.List[T]()
           à PamNHibernate.ShowDataBase.ShowDataBase1() dans c:\users\isen\documents\visual studio 2010\projects\PamNHibernate\PamNHibernate\Console\ShowDataBase.cs:ligne 50
           à PamNHibernate.ShowDataBase.Main(String[] args) dans c:\users\isen\documents\visual studio 2010\projects\PamNHibernate\PamNHibernate\Console\ShowDataBase.cs:ligne 22
      InnerException: System.Reflection.AmbiguousMatchException
           Message=Correspondance ambiguë trouvée.
           Source=mscorlib
           StackTrace:
                à System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
                à System.Type.GetMethod(String name)
                à Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.LockBlockExpression.Emit(IEasyMember member, ILGenerator gen)
                à Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.ExpressionStatement.Emit(IEasyMember member, ILGenerator gen)
                à Castle.DynamicProxy.Builder.CodeBuilder.AbstractCodeBuilder.Generate(IEasyMember member, ILGenerator il)
                à Castle.DynamicProxy.Builder.CodeBuilder.EasyMethod.Generate()
                à Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.EnsureBuildersAreInAValidState()
                à Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.BuildType()
                à Castle.DynamicProxy.Builder.CodeGenerators.BaseCodeGenerator.CreateType()
                à Castle.DynamicProxy.Builder.CodeGenerators.ClassProxyGenerator.GenerateCode(Type baseClass, Type[] interfaces)
                à Castle.DynamicProxy.Builder.DefaultProxyBuilder.CreateClassProxy(Type theClass, Type[] interfaces)
                à Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type baseClass, Type[] interfaces, IInterceptor interceptor, Boolean checkAbstract, Object[] argumentsForConstructor)
                à NHibernate.Proxy.CastleProxyFactory.GetProxy(Object id, ISessionImplementor session)
           InnerException:
    Si je supprime totalement "Indemnité" (base et classes) tout se passe normalement... Donc c'est bien sur le fait que ce soit un objet attaché à un objet...
    Après quelques heures de recherche sur le net et de debug... j'en suis toujours au même point


    Quelqu'un a une idée de ou cela pourrait venir?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux montrer le code de ta classe Employe ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Voici ma classe employe

    Code : 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
    19
    20
    21
    22
    23
    24
        public class Employe
        {
            // propriétés automatiques
            public virtual int Id { get; set; }
            public virtual int Version { get; set; }
            public virtual string SS { get; set; }
            public virtual string Nom { get; set; }
            public virtual string Prenom { get; set; }
            public virtual string Adresse { get; set; }
            public virtual string Ville { get; set; }
            public virtual string CodePostal { get; set; }
            public virtual Indemnites Indemnites { get; set; }
     
            // constructeurs
            public Employe()
            {
            }
     
            // ToString
            public override string ToString()
            {
                return string.Format("[{0}|{1}|{2}|{3}|{4}|{5}|{6}]", SS, Nom, Prenom, Adresse, Ville, CodePostal, Indemnites);
            }
        }
    Je viens de tester un truc, j'ai mis lazy à false dans ma hbm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <many-to-one name="Indemnites" column="INDEMNITE_ID" cascade="save-update" lazy="false" />
    Et la je n'ai plus d'erreur et j'ai le bon affichage...
    (or j'affiche indemnite donc j'arrive bien à aller le chercher en base via employe...)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre, lazy="false" ne devrait rien changer pourtant

    Enfin bon, tant mieux si ton problème est résolu

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Je ne dirais pas que mon problème est résolu, mais plutôt que j'ai trouvé une solution temporaire pour pouvoir continuer à coder. J'aimerais quand même trouver de où vient ce problème... Je pense que ça doit être un problème de config, surtout que dans le tuto ça fonctionne...
    Surtout que ça me coute des ressources (requetes en base + transport de données inutile), si j'ai bien compris le principe de lazy...
    Si quelqu'un a une idée sur l'origine du problème je l'accueillerais avec grand plaisir

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Problème résolu...

    Je travail sur Mssql2008 or la dll de nhibernate dans le tuto ne possédait pas le mssql2008dialect. Ayant lu sur le net que ce n'était pas un soucis et qu'on pouvait utiliser celui de 2005 c'est ce que j'ai fait.... Le problème venait de la, une dll plus récente avec le dialect 2008 => problem solved


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

Discussions similaires

  1. [NHibernate]Propriété Many-to-one et composite-id
    Par zoaax dans le forum NHibernate
    Réponses: 2
    Dernier message: 28/11/2011, 20h23
  2. [Hibernate]POJO et many-to-one
    Par azpublic dans le forum Hibernate
    Réponses: 3
    Dernier message: 13/07/2006, 16h00
  3. html:select et hibernate many-to-one
    Par davdou dans le forum Struts 1
    Réponses: 1
    Dernier message: 05/07/2006, 15h56
  4. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 14h08
  5. [hibernate] "many-to-one"
    Par mehdi_swatch dans le forum Hibernate
    Réponses: 26
    Dernier message: 12/05/2006, 21h11

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