2009-07-28 4 views
7

Je viens de mettre à NHibernate 2.1 et 2.0 de w/o changer mon schéma maintenant je reçois l'erreur:NHibernate: "Colonne 'Mot réservé" n'appartient pas à la table ReservedWords. " erreur

Column 'Reserved Word' does not belong to table ReservedWords.

en essayant de .OpenSession().

je peux ajouter la propriété:

<property name="hbm2ddl.keywords">none</property> 

au fichier hibernate.cfg.xml, qui "fixe" l'erreur.

Cependant, il serait utile de savoir pourquoi cette erreur se produit avec la mise à niveau et comment je pourrais la réparer.

+0

quel SGBD? . –

+0

Avez-vous vu ce sujet? http://groups.google.com/group/nhusers/browse_thread/thread/87811677a167c3c9 –

+0

Je reçois une erreur similaire. Pouvez-vous fournir des informations supplémentaires sur votre configuration? Le mien est MySQL 5.1, le connecteur MySQL ->. NET 6.1, .NET 3.5 SP1 et NHibernate 2.0. J'utilise également Fluent-NHibernate 1.0 RTM. –

Répondre

1

Taken de http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html

NHibernate a ajouté la possibilité de citer automatiquement les noms de tables et de colonnes qui sont des mots réservés à la base de données sélectionnée.

Par exemple si vous avez une classe avec une propriété "Order", si vous essayez de faire: SELECT Order FROM MyTable, alors la plupart des bases de données échoueront à analyser la requête. Dans MSSQL, vous devez faire SELECT [Order] FROM MyTable pour le faire fonctionner (d'où la citation des champs).

Générallement dans NHibernate vous pouvez citer des champs en utilisant `backticks` - ie. dans votre mappage en spécifiant la colonne pour Order comme Order vous permettrait alors d'utiliser une colonne appelée Order.

La modification de NHibernate permet d'indiquer automatiquement les champs à coter, vous n'avez donc pas besoin d'ajouter les guillemets manuellement.

Taken de cette URL, par exemple la cartographie:

<class name="Order"> 
    <id type="int"> 
     <generator class="native"/> 
    </id> 
    <property name="Select"/> 
    <property name="From"/> 
    <property name="And"/> 
    <property name="Column"/> 
    <property name="Name"/> 
</class> 

travailleraient sans avoir à citer l'un des noms de table ou de colonne

Questions connexes