Wie MySql date_add in Nhibernate zu benutzen?
-
27-09-2019 - |
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>
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.