2

これは本当に何時間も戸惑いました。私はインターネット全体を検索しましたが、うまくいく解決策はありませんでした。誰かが問題がどこにあるかを指摘できますか...ありがとう!自分の方言クラスを作成しました

public class MySQLDialectExtended : MySQLDialect
{
    public MySQLDialectExtended()
    {
        RegisterFunction("date_add_interval", new SQLFunctionTemplate(NHibernateUtil.Date, "date_add(?1, INTERVAL ?2 ?3)"));            
    }
}

それから私はそれを次のように使おうとします:

query.Append(
   " ( date_add_interval(D.ApprovalDate, 1, YEAR) < current_timestamp() <  date_add_interval(D.RenewalDate, -1, YEAR) )");

次の例外で失敗します。

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 677

ここで、列番号は最初の「YEAR」ワードの終わりにあります。

編集:これが私の設定です

    <property name="dialect">MyCompanyName.MySQLDialectExtended, MyCompanyName</property>
    <property name="hbm2ddl.keywords">none</property>
4

1 に答える 1

0

NHibernateクエリ全体を投稿できますか?

更新:まあ、クエリは明らかに不正で誤っています:

Select distinct D from MBIgnition.Core.Domain.Model.Deal D where 1=1 and 
( (D.MortgageStatus = 30 ) or 
  (D.MortgageStatus = 35 ) or 
  (D.MortgageStatus = 40 ) or 
  (D.MortgageStatus = 45 ) or 
  (D.MortgageStatus = 55 ) or 
  (D.MortgageStatus = 50 ) ) and 
  // next line is erroneous as the first AND operator does not have a lefthand side operand
(( and ( date_add_interval(D.ApprovalDate, 1, YEAR) < current_timestamp() < date_add_interval(D.RenewalDate, -1, YEAR) ) ) )

ご覧のとおりAND、コードには左側の引数のない演算子があります。HQLに問題があるはずです。もう一度確認してください。エラーを特定できなかった場合は、HQLまたは基準構築コードをここに投稿すると便利です。

于 2010-04-17T12:19:22.033 に答える