NHibernate:“列'保留字'不属于表的ReservedWords。”错误

时间:2009-07-28 18:02:34

标签: nhibernate

我刚刚从2.0升级到NHibernate 2.1并且没有更改我的架构现在我收到了错误:

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

尝试.OpenSession()

我可以添加属性:

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

hibernate.cfg.xml文件,“修复”错误。

但是,了解升级时出现此错误的原因以及解决方法可能会有所帮助。

1 个答案:

答案 0 :(得分:1)

取自http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html

NHibernate添加了自动引用作为所选数据库的保留字的表名和列名的功能。

例如,如果您有一个具有属性&#34; Order&#34;的类,如果您尝试执行:SELECT Order FROM MyTable,则大多数数据库将无法解析查询。在MSSQL中,您必须执行SELECT [Order] FROM MyTable才能使其工作(因此引用字段)。

通常在NHibernate中你可以使用`backticks`引用字段 - 即。在您的映射中,将订单列指定为Order,然后允许您使用名为Order的列。

NHibernate的更改允许自动引用需要引用的字段,因此您不需要手动添加引号。

取自该网址,例如映射:

<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>

无需引用任何表名或列名即可正常工作