Échapper à l'opérateur MySQL Assign (=) dans les requêtes natives Hibernate
Lorsque vous travaillez avec des requêtes natives Hibernate, il est possible de rencontrer des erreurs lors de l'utilisation l'opérateur d'affectation MySQL (:=) en raison de l'espace qui suit les deux points (:). Ce problème est particulièrement évident dans les cas où des instructions de sous-sélection sont nécessaires.
Le code fourni illustre ceci :
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
L'exécution de cette requête à l'aide de setParameter entraîne une exception mettant en évidence l'espace erroné après les deux points. .
Heureusement, Hibernate propose désormais une solution à ce problème. Dans Hibernate 4.1.3 et versions ultérieures, vous pouvez échapper à l'opérateur d'affectation à l'aide d'une barre oblique inverse (), comme indiqué ci-dessous :
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
En échappant les deux points, Hibernate interprète avec succès la syntaxe, vous permettant d'exécuter des requêtes de sous-sélection. efficacement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!