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 :

[NH3.0][C#] Problèmes Clés étrangères


Sujet :

NHibernate

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut [NH3.0][C#] Problèmes Clés étrangères
    Salut à tou(te)s ,

    C'est encore moi et cette fois j'ai un souci au niveau des clés étrangères.
    Ce sont des relations many-to-one et one-to-many.
    J'en ai deux qui fonctionnent mais pour d'autres cela ne fonctionne pas et pourtant la syntaxe et le principe sont identiques aux relations qui fonctionnent.

    C'est difficile de présenter le problème. Surtout que pour comprendre l'histoire, il faudrait poster les fichiers hbm.xml ...

    Voici le hbm de ma classe de base. Mon autre classe a un champ SSN_STA_ID
    qui pointe vers STA_ID de la classe stations_sta de base
    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
    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping assembly="FirstSolution" namespace="FirstSolution.Domain" xmlns="urn:nhibernate-mapping-2.2">
      <class name="stations_sta" table="stations_sta" lazy="true" >
        <id name="STA_ID">
          <column name="STA_ID" sql-type="int(11)" not-null="true" />
          <generator class="identity" />
        </id>
        <property name="STA_NAME">
          <column name="STA_NAME" sql-type="varchar(45)" not-null="true" />
        </property>
     
        <many-to-one insert="false" update="false" lazy="false" name="STA_FAC">
          <column name="STA_FAC" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="STA_FAC">
          <column name="STA_FAC" sql-type="int(11)" not-null="true" />
        </property>
        -->
        <bag name="fb_serials_srls" inverse="true" cascade="none">
          <key column="SRL_ID" />
          <one-to-many class="fb_serials_srl" />
        </bag>
        <bag name="l_station_addresses_numalloc_sans" inverse="true" cascade="none">
          <key column="SAN_STA_ID" />
          <one-to-many class="l_station_addresses_numalloc_san" />
        </bag>
        <bag name="l_station_serials_numalloc_ssns" inverse="true" cascade="none">
          <key column="SSN_STA_ID" />
          <one-to-many class="l_station_serials_numalloc_ssn" />
        </bag>
      </class>
    </hibernate-mapping>
    Fichier de mapping pour la table où les clés étrangères se font correctement:

    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
    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping assembly="FirstSolution" namespace="FirstSolution.Domain" xmlns="urn:nhibernate-mapping-2.2">
      <class name="l_station_addresses_numalloc_san" table="l_station_addresses_numalloc_san" lazy="true" >
        <id name="SAN_ID">
          <column name="SAN_ID" sql-type="int(11)" not-null="true" />
          <generator class="identity" />
        </id>
     
        <many-to-one insert="false" update="false" lazy="false" name="SAN_TVN_ID">
          <column name="SAN_TVN_ID" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SAN_TVN_ID">
          <column name="SAN_TVN_ID" sql-type="int(11)" not-null="true" />
        </property>
        -->
        <many-to-one insert="false" update="false" lazy="false" name="SAN_STA_ID">
          <column name="SAN_STA_ID" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SAN_STA_ID">
          <column name="SAN_STA_ID" sql-type="int(11)" not-null="true" />
        </property>
        -->
        <property name="SAN_NUMALLOC">
          <column name="SAN_NUMALLOC" sql-type="int(11)" not-null="true" />
        </property>
        <property name="SAN_SIZE">
          <column name="SAN_SIZE" sql-type="int(11)" not-null="true" />
        </property>
      </class>
    </hibernate-mapping>
    Autre table pour laquelle la clé etrangère sur stations_sta ne fonctionne pas et pourtant ça ne differe pas du fichier qui marche.

    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
    42
    43
    44
    45
    46
    47
    48
    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping assembly="FirstSolution" namespace="FirstSolution.Domain" xmlns="urn:nhibernate-mapping-2.2">
      <class name="fb_serials_srl" table="fb_serials_srl" lazy="true" >
        <id name="SRL_ID">
          <column name="SRL_ID" sql-type="int(11)" not-null="true" />
          <generator class="identity" />
        </id>
        <property name="SRL_DATE">
          <column name="SRL_DATE" sql-type="datetime" not-null="true" />
        </property>
        <property name="SRL_SN">
          <column name="SRL_SN" sql-type="varchar(45)" not-null="true" />
        </property>
     
        <many-to-one insert="false" update="false" lazy="false" name="SRL_STATION">
          <column name="SRL_STATION" sql-type="varchar(45)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SRL_STATION">
          <column name="SRL_STATION" sql-type="varchar(45)" not-null="true" />
        </property>
        -->
        <many-to-one insert="false" update="false" lazy="false" name="SRL_RFT_ID">
          <column name="SRL_RFT_ID" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SRL_RFT_ID">
          <column name="SRL_RFT_ID" sql-type="int(11)" not-null="true" />
        </property>
        -->
        <many-to-one insert="false" update="false" lazy="false" name="SRL_TVN_ID">
          <column name="SRL_TVN_ID" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SRL_TVN_ID">
          <column name="SRL_TVN_ID" sql-type="int(11)" not-null="true" />
        </property>
        -->
        <many-to-one insert="false" update="false" lazy="false" name="SRL_FID_ID">
          <column name="SRL_FID_ID" sql-type="int(11)" not-null="true" />
        </many-to-one>
        <!--
        <property name="SRL_FID_ID">
          <column name="SRL_FID_ID" sql-type="int(11)" not-null="true" />
        </property>
        -->
      </class>
    </hibernate-mapping>

    Merci d'avance pour vos conseils ...

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    Peut tu donner plus de précision sur les erreurs remonte et le contexte utilisé (Web, client lourd ect....) et l'environnement

    Merci
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Voici les erreurs générées lors du déroulement du test Nunit

    ------ Test started: Assembly: FirstSolution.Tests.dll ------

    FixtureSetUp
    SetUp
    Test 'FirstSolution.Tests.ReferenceRepository_Fixture.Can_add_new_ref' failed: NHibernate.HibernateException : Can't create table 'spring.#sql-d08_d1' (errno: 150)
    ----> MySql.Data.MySqlClient.MySqlException : Can't create table 'spring.#sql-d08_d1' (errno: 150)
    at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolean export, Boolean justDrop)
    at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, Boolean export, Boolean justDrop)
    ReferenceRepository_Fixture.cs(46,0): at FirstSolution.Tests.ReferenceRepository_Fixture.SetupContext()
    --MySqlException
    at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
    at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
    at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
    at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
    at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
    at NHibernate.Tool.hbm2ddl.SchemaExport.ExecuteSql(IDbCommand cmd, String sql)
    at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolean export, Boolean throwOnError, TextWriter exportOutput, IDbCommand statement, String sql)
    at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolean export, Boolean justDrop, IDbConnection connection, TextWriter exportOutput)
    at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolean export, Boolean justDrop)

    0 passed, 1 failed, 0 skipped, took 6,72 seconds (NUnit 2.5.5).
    L'errno 150 correspond bien à un pb de clé étrangère si je ne me trompe pas.

    Je suis en NH3.0, .Net 2.0, Visual Studio 2005
    MySql 5.5, Proxy LinFu (Castle ne fonctionne pas étonnamment)

    Je précise également que j'ai utilisé NHibernate Mapping Generator pour créer les classes et les hbm.xml. J'ai ensuite du adapter les classes pour palier aux properties automatiques qui ne sont pas générés en .Net 2.0 et j'ai rempli les champs Key column dans les balises <bag> des mappings pour pointer sur le bon champ de la table référencée.

    Et c'est une application CRUD destinée à du winform...par de framework particulier pour le moment. C'est simplement histoire de faire tourner NHibernate sur une base de données existante.

    Le mapping me pose pas mal de pbs avec les foreign keys qui passent pas toutes.

  4. #4
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    A vu d’œil effectivement tes fichier de mapping n'ont pas l aire faux. J’avoue que j'utilise plus volontiers FluentHibernate pour la création de mes mapping et aussi avoir très peu de connaissance sur le SGBD MySql (en gros je sert a que dalle ).....

    Je regarde quand même si je peut trouver une piste afin de t'aider.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Hé merci de m'aider, c'est très sympa !

    Tu me dis qu'avec fluentNHibernate ça marche bien dans ton cas ?
    Est-ce que si je tente de l'utiliser ça peut me générer des mappings corrects ?

    J'ai vu que NHibernate Mapping Generator peut aussi générer les classes pour fluentNHibernate. C'est ce que tu as fait ?

  6. #6
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Salut,

    la Fluent API de NHibernate permet une approche plus souple et est surtout utilisé pour une approche Code-First, on code puis les tables sont générées en fonction. Alors que le mappings xml permet d'avoir une assurance sur notre mappings entre les classes et la base, approche DataBase-First. Par contre les générateur automatique comme Visual NHibernate (version d'essai) marche plutôt bien.

    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  7. #7
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    L’idée de fluent est de faire le mapping des table par une approche "programmatique", je trouve cela plus convivial et tu bénéficies de l’auto-complétion (car tu code en c#, même si l'auto-complétion existe pour la création des schéma xml...).

    Je me posait une question au vu des exception remontées, a tu des erreurs au moment ou tu créer ta Factorie ou seulement au moment de l’interrogation de la table (si tu demande a Nhibernate de te sortir les requêtes généré sont elle correctes) ? Le schema dans mySql est il correcte, ta table est elle correctement créer. Demande tu a ta Factorie de la créer si elle n'existe pas ?


    (Edit : question mal posée)
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Alors que le mappings xml permet d'avoir une assurance sur notre mappings entre les classes et la base, approche DataBase-First.
    Sachant que ma base est déjà bien définie et qu'elle est déja en production, cette approche me semble la meilleure. Vous en pensez quoi ?

    Par contre les générateur automatique comme Visual NHibernate (version d'essai) marche plutôt bien.
    Je vais essayer Visual NHibernate parce qu'avec NHibernate Mapping Generator j'ai justement des pbs avec les hbm.xml produits... Les foreigns key sont pas bien gérées.

    Je me posait une question au vu des exception remontées, a tu des erreurs au moment ou tu créer ta Factorie ou seulement au moment de l’interrogation de la table (si tu demande a Nhibernate de te sortir les requêtes généré sont elle correctes) ? Le schema dans mySql est il correcte, ta table est elle correctement créer. Demande tu a ta Factorie de la créer si elle n'existe pas ?
    Les tables sont créées mais les foreign keys sont quasiment toutes absentes...
    J'ai configuré NHibernate avec un "show_sql" mais ça ne m'affiche pas les requetes SQL ... ce qui est bien embetant pour debugger.

    En fait dans ma methode de test NUnit, j'ai en setup un schema export pour maitriser exactement le contenu de mes tables de la base. Donc avant chaque methode de test appelée je recrée toutes les tables et y insere des valeurs.
    Même lorsque la base est vide, ça plante pour les foreign keys...

  9. #9
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par Xploit Voir le message
    Sachant que ma base est déjà bien définie et qu'elle est déja en production, cette approche me semble la meilleure. Vous en pensez quoi ?
    En fait je suis plus ou moins mitigé avec cet avis, le but étant de définir un mapping qui soit totalement équivalent à la base, que tu le fasse à la en Xml, ou avec fluent n'as pas vraiment d'importance car le but étant que le mapping soit cohérent avec la base de donnée. Ensuite c'est une question d'outils, tu préfère lire du c# (ou VB) ou un fichier xml ??? Souhaite tu tout faire à la main pour contrôler tout ou préfère tu que les choses soit auto générée, l'important étant que le résultat soit équivalent et que tu soit productif/efficace.

    Citation Envoyé par Xploit Voir le message
    Les tables sont créées mais les foreign keys sont quasiment toutes absentes...
    J'ai configuré NHibernate avec un "show_sql" mais ça ne m'affiche pas les requetes SQL ... ce qui est bien embetant pour debugger.
    Pour moi tu viens de donner l'explication du problème, Nhibernate va demander à la base de donnée le nom réelle de l'intégrité utilisée, donc si elle n'est pas définie Mysql va lui dire : "Ta clé étrangère n'existe pas....."
    Concernant l'affichage des requêtes j'ai déjà eu le soucis mais je me souviens plus d'où ça venait, surement ta factory qui est mal généré (surement du au fait que ton mapping n'est pas cohérent avec ton schéma : les clés primaires/étrangères mal définie).

    Regarde le delta que tu as entre une base créer par Nhibernate à partir de ton schéma et le schéma utilisé.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    En fait, utiliser FluentNHibernate me déplairait pas.
    Seulement quand j'essaie de l'utiliser en mettant la librairie en reference et en me plaçant dans le fichier de mapping d'une table au hasard par exemple...le code fluent n'est pas reconnu ...

    lors que je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public class FbSerialsSrlMapping : ClassMap<FbSerialsSrl>
    	{
    		public FbSerialsSrlMapping()
    		{
    			Table("`fb_serials_srl`");
    			Schema("test_sn");
    			Id(x => x.SrlId, "SRL_ID")
    				.GeneratedBy.Native();
    A la ligne Id(x => x... le '>' est sougligné en rouge et j'ai l'erreur
    Invalid expression term '>'
    Donc j'en deduis qu'il y a un probleme de compatibilité avec certaines autres librairies en reference ?
    J'ai pris FluentNHibernate pour le NH3.1 ... et j'ai mis en reference toutes les libs présentes dans le zip ...
    Donc voilà c pas vraiment plus concluant avec fluent pour le moment.

    J'essaie pour le moment de créer les classes tables.cs et les mappings.cs avec Visual NHibernate à partir de ma base MySQL5.5 existante.

    Vous utilisez quelles versions de Fluent et NH ?

  11. #11
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    En regardant ton ancien poste j'ai vu que tu utilisait .Net 2.0, hors dans cette version du Framework les expressions lambda ne sont pas connues. C'est a confirmer mais la version la plus basse du Framework compatible avec Fluent est le 3.5.
    D'autre part je crois qu'il convient mieux d’écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class FbSerialsSrlMapping : ClassMap<FbSerialsSrl>
    	{
    		public FbSerialsSrlMapping()
    		{
    			Table("`fb_serials_srl`");
    			Schema("test_sn");
    			Id(x => x.SrlId).Key("SRL_ID")
    				.GeneratedBy.Native();
                  }
           }
    La lecture en devient plus agréable car les noms de fonctions corresponde au noms d'attribut utilisé dans le fichier Xml.
    Il est vrai que Fluent est un outil très agréable pour réaliser le mapping car il permet une lecture facile tout en laissant la possibilité de maitriser entièrement ce que l'on fait.


    De toute manière je pense que le fait d'utilisé Fluent ou pas ne fera que déporter ton problème. Il faut que ton mapping décrive au maximum et soit le plus proche possible de ton schéma de donnée. J'ai moi même été dans ton cas dans un projet et j'ai pu le résoudre uniquement en précisant parfaitement et le plus explicitement les relations que j'avais entre les tables.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Ah ouais effectivement, ça serait intéressant de savoir si y a requirements spécifiques pour utiliser fluent...
    En tout cas je n'ai rien trouvé sur le sujet.

    Je vais essayer de regler mon problème en refaisant une passe sur les fichiers hbm.xml mais bon j'ai rien trouvé de prometteur. Surtout que le "show_sql" ne fonctionne pas et je ne peux pas utiliser cette info pour debugger ...

    Bon en tout cas merci pour votre aide. Je vais me pencher sur le problème encore une fois en espérant trouver une coquille ...

    Bon j'ai eu l'idée d'aller voir sur le logs coté server mysql puisque je n'avais pas la possibilité de voir les requetes sql généré par nhibernate directement dans visual studio.
    111117 12:40:33 256 Connect spring@localhost on spring
    256 Query SHOW VARIABLES
    256 Query SHOW COLLATION
    256 Query SET character_set_results=NULL
    256 Init DB spring
    256 Init DB spring
    256 Query alter table stations_sta drop foreign key FK910C48B28ED437BA
    256 Query alter table l_type_vendor_num_tvn drop foreign key TYP_ID
    256 Query alter table l_type_vendor_num_tvn drop foreign key FK2CB54A34AD8C096E
    256 Query alter table l_station_serials_numalloc_ssn drop foreign key FK4690B83476ADB8EB
    256 Query alter table l_station_serials_numalloc_ssn drop foreign key FK4690B834E708C790
    256 Query alter table l_ref_fix_tvn_rft drop foreign key FKDB11D44C6908A64B
    111117 12:40:34 256 Query alter table l_ref_fix_tvn_rft drop foreign key FKDB11D44CF3F021C7
    256 Query alter table l_ref_fix_tvn_rft drop foreign key FKDB11D44CCCA3CAB9
    256 Query alter table l_ref_fix_tvn_rft drop foreign key FKDB11D44C881A653
    256 Query alter table l_station_addresses_numalloc_san drop foreign key FKA303BE42E1BB8E6
    256 Query alter table l_station_addresses_numalloc_san drop foreign key FKA303BE43F3EC791
    111117 12:40:35 256 Query alter table l_factory_id_fid drop foreign key FKE7FDCF9E3BBD7704
    256 Query alter table fb_serials_srl drop foreign key FKA4D16D1C259A33A
    256 Query alter table fb_serials_srl drop foreign key FKA4D16D1CBEA9264A
    256 Query alter table fb_serials_srl drop foreign key FKA4D16D1CCF70C041
    256 Query alter table fb_serials_srl drop foreign key FKA4D16D1C725DFA6B
    256 Query drop table if exists stations_sta
    256 Query drop table if exists l_type_vendor_num_tvn
    256 Query drop table if exists l_station_serials_numalloc_ssn
    256 Query drop table if exists l_ref_fix_tvn_rft
    256 Query drop table if exists fixtures_fix
    111117 12:40:36 256 Query drop table if exists types_typ
    256 Query drop table if exists vendors_ven
    256 Query drop table if exists l_station_addresses_numalloc_san
    256 Query drop table if exists factories_fac
    256 Query drop table if exists l_factory_id_fid
    256 Query drop table if exists fb_serials_srl
    256 Query drop table if exists references_ref
    256 Query create table stations_sta (STA_ID int(11) NOT NULL AUTO_INCREMENT, STA_NAME varchar(45) not null, STA_FAC int(11) not null, primary key (STA_ID))
    256 Query create table l_type_vendor_num_tvn (TVN_ID int(11) NOT NULL AUTO_INCREMENT, TVN_TYP_ID int(11) not null, TVN_VEN_ID int(11) not null, TVN_VENDORID int(11), TVN_SIZE int(11) not null, TVN_DESC varchar(45), primary key (TVN_ID))
    256 Query create table l_station_serials_numalloc_ssn (SSN_ID int(11) NOT NULL AUTO_INCREMENT, SSN_TVN_ID int(11) not null, SSN_STA_ID int(11) not null, SSN_NUMALLOC int(11) not null, primary key (SSN_ID))
    256 Query create table l_ref_fix_tvn_rft (RFT_ID int(11) NOT NULL AUTO_INCREMENT, RFT_REF int(11) not null, RFT_FIX int(11) not null, RFT_TVN_ID int(11) not null, RFT_FID_ID int(11) not null, RFT_PRIORITY int(11), primary key (RFT_ID))
    256 Query create table fixtures_fix (FIX_ID int(11) NOT NULL AUTO_INCREMENT, FIX_NAME varchar(45) not null, primary key (FIX_ID))
    256 Query create table types_typ (TYP_ID int(11) NOT NULL AUTO_INCREMENT, TYP_NAME varchar(45) not null, primary key (TYP_ID))
    256 Query create table vendors_ven (VEN_ID int(11) NOT NULL AUTO_INCREMENT, VEN_NAME varchar(45) not null, primary key (VEN_ID))
    256 Query create table l_station_addresses_numalloc_san (SAN_ID int(11) NOT NULL AUTO_INCREMENT, SAN_TVN_ID int(11) not null, SAN_STA_ID int(11) not null, SAN_NUMALLOC int(11) not null, SAN_SIZE int(11) not null, primary key (SAN_ID))
    111117 12:40:37 256 Query create table factories_fac (FAC_ID int(11) NOT NULL AUTO_INCREMENT, FAC_NAME varchar(45) not null, primary key (FAC_ID))
    256 Query create table l_factory_id_fid (FID_ID int(11) NOT NULL AUTO_INCREMENT, FID_FAC_ID int(11) not null, FID_FACTORY_ID varchar(25), primary key (FID_ID))
    256 Query create table fb_serials_srl (SRL_ID int(11) NOT NULL AUTO_INCREMENT, SRL_DATE datetime not null, SRL_SN varchar(45) not null, SRL_STATION varchar(45) not null, SRL_RFT_ID int(11) not null, SRL_TVN_ID int(11) not null, SRL_FID_ID int(11) not null, primary key (SRL_ID))
    256 Query create table references_ref (REF_ID int(11) NOT NULL AUTO_INCREMENT, REF_NAME varchar(45) not null, primary key (REF_ID))
    256 Query alter table stations_sta add index (STA_FAC), add constraint FK910C48B28ED437BA foreign key (STA_FAC) references factories_fac (FAC_ID)
    256 Query alter table l_type_vendor_num_tvn add index (TVN_TYP_ID), add constraint TYP_ID foreign key (TVN_TYP_ID) references types_typ (TYP_ID)
    256 Query alter table l_type_vendor_num_tvn add index (TVN_VEN_ID), add constraint FK2CB54A34AD8C096E foreign key (TVN_VEN_ID) references vendors_ven (VEN_ID)
    111117 12:40:38 256 Query alter table l_station_serials_numalloc_ssn add index (SSN_TVN_ID), add constraint FK4690B83476ADB8EB foreign key (SSN_TVN_ID) references l_type_vendor_num_tvn (TVN_ID)
    256 Query alter table l_station_serials_numalloc_ssn add index (SSN_STA_ID), add constraint FK4690B834E708C790 foreign key (SSN_STA_ID) references stations_sta (STA_ID)
    256 Query alter table l_ref_fix_tvn_rft add index (RFT_REF), add constraint FKDB11D44C6908A64B foreign key (RFT_REF) references references_ref (REF_ID)
    256 Query alter table l_ref_fix_tvn_rft add index (RFT_FIX), add constraint FKDB11D44CF3F021C7 foreign key (RFT_FIX) references fixtures_fix (FIX_ID)
    256 Query alter table l_ref_fix_tvn_rft add index (RFT_TVN_ID), add constraint FKDB11D44CCCA3CAB9 foreign key (RFT_TVN_ID) references l_type_vendor_num_tvn (TVN_ID)
    111117 12:40:39 256 Query alter table l_ref_fix_tvn_rft add index (RFT_FID_ID), add constraint FKDB11D44C881A653 foreign key (RFT_FID_ID) references l_factory_id_fid (FID_ID)
    256 Query alter table l_station_addresses_numalloc_san add index (SAN_TVN_ID), add constraint FKA303BE42E1BB8E6 foreign key (SAN_TVN_ID) references l_type_vendor_num_tvn (TVN_ID)
    256 Query alter table l_station_addresses_numalloc_san add index (SAN_STA_ID), add constraint FKA303BE43F3EC791 foreign key (SAN_STA_ID) references stations_sta (STA_ID)
    256 Query alter table l_factory_id_fid add index (FID_FAC_ID), add constraint FKE7FDCF9E3BBD7704 foreign key (FID_FAC_ID) references factories_fac (FAC_ID)
    256 Query alter table fb_serials_srl add index (SRL_STATION), add constraint FKA4D16D1C259A33A foreign key (SRL_STATION) references stations_sta (STA_ID)
    Ca va p-e m'aider à trouver le problème.

  13. #13
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Quelques points a vérifié tout de même :

    - Utilise tu le bon dialecte
    - Précise bien le nom des séquence que tu utilise dans ton mapping
    - il y a parfois aussi des soucis suivant l'ordre du Flush() et commit() Save/update/delete (très chiant à gérer)
    - Utilise tu le bon générateur de séquence (je sais qu il y a un truc spéciale pour Mysql).
    - Je sais aussi que sur MySql tu as plusieurs type de table suivant le fait d'avoir des contraintes d'intégrité. Regarde aussi de ce cote là (je n'ai que très peu utilise Mysql)

    Essaye aussi de supprimer le lazy qui peut compliquer les choses dans un but de test.
    Essaye de générer ton schéma sur un SqlServer pour voir si tu as bien le bon.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Bon, je vous fais une petite mise à jour de la situation.

    En fait j'ai enlevé plusieurs librairies en références dont celles du proxy.
    Bizarrement sans ces deux dlls en références et la configuration du hibernate.hbm.xml comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    Déjà là ça m'étonne...enfin bref ...

    Le petit problème que j'ai maintenant est une erreur lors de la génération d'une clé étrangère sur un champ varchar(45)
    J'ai essayé en changeant le type de ce champ en int(11) et là bingo ça marche. Ma base est créée avec toutes les tables et les FK adéquates ... Aucune idée du pourquoi cette clé etrangère vers un champ varchar(45) peut poser un problème...

    M-A-J : En fait j'ai remarqué que le champ pointé par ma clé étrangère dans le cas qui pose problème n'est pas une clé primaire d'une table mais un champ varchar(45) avec contrainte d'unicité.
    Est-ce qu'il faut faire quelque chose de spécial pour, via une clé étrangère, pointer vers un champ autre qu'une clé primaire ?

    MAJ2: je crois qu'il faut utiliser property-ref pour pointer vers autre chose que la clé primaire ... j'vais tester

    SI vous avez des remarques...

    Globalement ça avance mine de rien. Merci encore pour votre aide ;p

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/03/2011, 13h27
  2. Problèmes clés étrangères
    Par romaix21 dans le forum SQL
    Réponses: 1
    Dernier message: 29/02/2008, 11h46
  3. Problème de clés étrangères
    Par parano dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 20/11/2007, 09h50
  4. Problème avec les clés étrangères
    Par PoichOU dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 06/11/2007, 09h46
  5. Problème création clés étrangères
    Par sat478 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/05/2006, 15h53

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