Escape des MySQL Assign (=)-Operators in nativen Hibernate-Abfragen
Bei der Arbeit mit nativen Hibernate-Abfragen können bei der Verwendung Fehler auftreten der MySQL-Zuweisungsoperator (:=) aufgrund des Leerzeichens nach dem Doppelpunkt (:). Dieses Problem tritt besonders deutlich in Fällen auf, in denen Subselect-Anweisungen erforderlich sind.
Der bereitgestellte Code veranschaulicht dies:
SELECT sub.rownum FROM (SELECT k.news_master_id AS id, @row := @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row := 0) r WHERE k.keyword_news_id = :kid ORDER BY k.news_master_id ASC) AS sub WHERE sub.id = :nid
Das Ausführen dieser Abfrage mit setParameter führt zu einer Ausnahme, die das fehlerhafte Leerzeichen nach dem Doppelpunkt hervorhebt .
Glücklicherweise bietet Hibernate jetzt eine Lösung für dieses Problem. In Hibernate 4.1.3 und höher können Sie den Zuweisungsoperator mit einem Backslash () maskieren, wie unten gezeigt:
SELECT k.news_master_id AS id, @row \:= @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row \:= 0) r WHERE k.keyword_news_id = :kid ORDER BY k.news_master_id ASC
Durch das Escapezeichen des Doppelpunkts interpretiert Hibernate die Syntax erfolgreich, sodass Sie Unterauswahlabfragen ausführen können effektiv.
Das obige ist der detaillierte Inhalt vonWie entkomme ich dem MySQL-Zuweisungsoperator (:=) in nativen Hibernate-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!