2

プロジェクトで Nhibernate 2.1.0 を使用しています。

プロパティ Path と次の名前付きクエリを持つ Item クラスがあります。

<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'>
     <sql-query name='updateUNC'>
    <query-param name='oldUNC' type='String'/>
    <query-param name='newUNC' type='String'/>
    <![CDATA[
       update Item s set
          s.Path= replace(s.Path,:oldUNC, :newUNC),
    ]]>
  </sql-query>
</hibernate-mapping>

次のコードを使用して名前付きクエリを実行します。

session.GetNamedQuery("updateUNC")
       .SetString("oldUNC", "old")
       .SetString("newUNC", "new")
       .ExecuteUpdate();

しかし、次の例外が発生します。

 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException was unhandled
   Message="Can't determine SqlType of parameter name=oldUNC, expectedType=Unknow\n      Possible cause: wrong case-sensitive property-name."
   Source="NHibernate"
   StackTrace:
        at NHibernate.Hql.Ast.ANTLR.Exec.BasicExecutor.Execute(QueryParameters parameters, ISessionImplementor session) in C:\Projects\Nhibernate\nhibernate2.1.0\src\NHibernate\Hql\Ast\ANTLR\Exec\BasicExecutor.cs:line 66
        at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.ExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session) in C:\Projects\Nhibernate\nhibernate2.1.0\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line 149
        at NHibernate.Engine.Query.HQLQueryPlan.PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session) in C:\Projects\Nhibernate\nhibernate2.1.0\src\NHibernate\Engine\Query\HQLQueryPlan.cs:line 328
        at NHibernate.Impl.StatelessSessionImpl.ExecuteUpdate(String query, QueryParameters queryParameters) in C:\Projects\Nhibernate\nhibernate2.1.0\src\NHibernate\Impl\StatelessSessionImpl.cs:line 962
        at NHibernate.Impl.QueryImpl.ExecuteUpdate() in C:\Projects\Nhibernate\nhibernate2.1.0\src\NHibernate\Impl\QueryImpl.cs:line 120
        at Catalog.Repository.ItemsRepository.ChangeUNC(String oldUNC, String newUNC) in C:\Projects\Catalog\Catalog\Repository\ItemsRepository.cs:line 148

SetParameter<string> と SetParameter(":oldUNC", "old" NHibernateUtil.String) を使用してパラメーター値を設定しようとしましたが、同じエラーで失敗しました。これは、NHibernate がパラメーター値が文字列であると言って私を無視するようなものです :(.

4

1 に答える 1

0

推測ですが、マッピングファイルに小文字の文字列を書き込もうとしましたか?

<query-param name='oldUNC' type='string'/>
于 2009-07-21T07:38:31.557 に答える