Frage

Das verwirrte wirklich stundenlang, suchte ich alle über das Internet, bekam aber keine funktionierende Lösung. Kann jemand Punkt, wo das Problem ist ... Dank! Ich habe meine eigenen Dialekt Klasse

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

Dann versuche ich es wie folgt zu verwenden:

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

Es schlägt fehl, mit folgenden Ausnahme:

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

, wo die Spaltennummer am Ende des ersten ‚YEAR‘ Wortes ist.

Edit: hier ist meine Konfiguration

    <property name="dialect">MyCompanyName.MySQLDialectExtended, MyCompanyName</property>
    <property name="hbm2ddl.keywords">none</property>
War es hilfreich?

Lösung

Können Sie die NHibernate-Abfrage schreiben?

UPDATE: Nun, ist die Abfrage offensichtlich fehlerhafte und fehlerhafte:

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

Wie Sie sehen können, gibt es einen AND Operator im Code ohne linke seitigen Argumente. Es sollte etwas falsch mit Ihrem HQL sein. Doppel es erneut überprüfen und, wenn Sie den Fehler nicht lokalisieren könnte es nützlich sein, die HQL oder die Kriterien zu schreiben Code bauen hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top