2012-04-27 15 views
3

私は、テーブルpastaIndividualとの関係が多対1のデータベースに注文オブジェクトを保存しようとしています。GenericADOException:挿入できませんでした

しかし、私はこの例外を取得しています:ここで

Error: NHibernate.Exceptions.GenericADOException: could not insert: [FrancosPoS.DBMapping.order][SQL: INSERT INTO order (price, cash, credit, obs) VALUES (?, ?, ?, ?);SELECT LAST_INSERT_ID()] ---> MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (price, cash, credit, obs) VALUES ('123', 1, 0, 'Nhibernate');SELECT LAST_' at line 1

は私のためのマッピングテーブルです:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="order" table="order" lazy="true" > 
    <id name="idOrder"> 
     <generator class="identity" /> 
    </id> 
    <set name="pastaIndividual" table="pasta_individual" cascade="save-update"> 
     <key column="idPastaI"/> 
     <one-to-many class="pastaIndividual"/> 
    </set> 
    <!--<many-to-one insert="false" update="false" lazy="false" name="pastaIndividual" class="FrancosPoS.DBMapping.pastaIndividual"> 
     <column name="idPastaI" sql-type="int(11)" not-null="false" /> 
    </many-to-one>--> 
    <many-to-one insert="false" update="false" lazy="false" name="pastaCombo" class="FrancosPoS.DBMapping.pastaCombo"> 
     <column name="idPastaC" sql-type="int(11)" not-null="false" /> 
    </many-to-one> 
    <many-to-one insert="false" update="false" lazy="false" name="pastaFeast" class="FrancosPoS.DBMapping.pastaFeast"> 
     <column name="idPastaF" sql-type="int(11)" not-null="false" /> 
    </many-to-one> 
    <many-to-one insert="false" update="false" lazy="false" name="salad" class="FrancosPoS.DBMapping.salad"> 
     <column name="idSalad" sql-type="int(11)" not-null="false" /> 
    </many-to-one> 
    <many-to-one insert="false" update="false" lazy="false" name="drink" class="FrancosPoS.DBMapping.drink"> 
     <column name="idDrink" sql-type="int(11)" not-null="false" /> 
    </many-to-one> 
    <property name="price"> 
     <column name="price" sql-type="decimal(8,4)" not-null="true" /> 
    </property> 
    <property name="cash"> 
     <column name="cash" sql-type="tinyint(1)" not-null="false" /> 
    </property> 
    <property name="credit"> 
     <column name="credit" sql-type="tinyint(1)" not-null="false" /> 
    </property> 
    <property name="obs"> 
     <column name="obs" sql-type="varchar(150)" not-null="false" /> 
    </property> 
    </class> 
</hibernate-mapping> 

ここでは私のpastaIndividualマッピングです:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="pastaIndividual" table="pasta_individual" lazy="true" > 
    <id name="idPastaI"> 
     <generator class="identity" /> 
    </id> 
    <property name="type"> 
     <column name="type" sql-type="varchar(25)" not-null="true" /> 
    </property> 
    <property name="price"> 
     <column name="price" sql-type="decimal(8,4)" not-null="true" /> 
    </property> 
    </class> 
</hibernate-mapping> 

私がしました<set>または<many-to-one>を使用する注文マッピングを試しましたが、同じエラーが発生します。

私はいくつかの逆特性がないかもしれませんか?

ありがとうございました。

+0

構文要素をエスケープせずに列名として使用しているため、挿入が失敗すると思われます。 – Andreas

答えて

2

オーダーは予約語です。あなたのクラス定義にいくつかのバックティックを追加するだけで、NHibernateはテーブル名を自動的にエスケープします。

<class name="order" table="`order`" lazy="true" > 
+1

ありがとう、あなた! バックチックを確認するには、そのような単純な引用符ではなく、入力したものと同じである必要があります。 – gbc921

関連する問題