7

名前にスペースを含むテーブルのクエリで問題が発生しています

SQL クエリを記述した場合、つまり SELECT * FROM [製品グループ] は正常に動作しますが、NHibernate CreateQuery を使用するとすべてが壊れます

using (ISession session = SessionFactory.OpenSession())
{
    IQuery query = session.CreateQuery("FROM [product groups]");
    IList<ProductGroups> results = query.List<ProductGroups>();
}

エラーが発生します

タイプ「Antlr.Runtime.NoViableAltException」の例外がスローされました。1 行目の 5 列目付近

NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException() at NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()
...

CreateSQLQuery を使用すると機能します

ISQLQuery query = session.CreateSQLQuery("SELECT ID, Title, [Available as develop] FROM [product groups]").AddEntity(typeof(ProductGroups));
IList<ProductGroups> results = query.List<ProductGroups>();

マッピングファイルは次のようになります

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="ListModels.ProductGroups, ListModels" lazy="true" table="Product groups">
    <id name="ID">
      <generator class="native" />
    </id>
    <property name="Title" />
    <property name="AvailableAsDevelopmentLicense" column="Available as develop" />
  </class>
</hibernate-mapping>

CreateQuery が機能しないのはなぜですか?

4

1 に答える 1

9

ここCreateQuery()で説明されている : 9.3.2. IQuery インターフェイスは、エンティティを 14 でクエリする方法です。 HQL: Hibernate Query Language

つまり、テーブル名 の代わりにドメインモデル名を使用する必要があります。ProductGroups[product groups]

//IQuery query = session.CreateQuery("FROM [product groups]");
IQuery query = session.CreateQuery("FROM ListModels.ProductGroups as pg");
于 2013-06-30T07:30:14.000 に答える