Meine unterstrichene Datenbank ist MS SQL Server. Ich verwende HQL-Abfrage durch Java Hibernate. Wenn ich die Funktion replace innerhalb von concat verwende, wird die Abfrage falsch interpretiert. Beispiel:
HQL Query : from Project where replace('\\\\yyy\\\\','\\\\','\\\\\\\\') like concat(replace(projectPathPrefix,'\\\\','\\\\\\\\\\\\\\\\')),'%') and sourceControlSystems=3
SQL interpretation : select * from PRJ_project project where (replace('\\ooo\\', '\\', '\\\\') like replace(project0_.project_path_prefix+'\\'+'\\\\\\\\')+'%' and source_control_system_id=3
Es wandelt auch die Kommas um ,
von replace-Funktion in +
da die äußere Klammer die Funktion concat enthält. Dies funktioniert gut, wenn die untergeordnete Datenbank MySQL oder Oracle ist, da beide die concat-Funktion verwenden. Da SQL Server jedoch den Operator "+" für die Verkettung verwendet, ersetzt HQL die concat-Funktion durch +
auf eine sehr absurde Weise. Bitte schlagen Sie eine Lösung für dieses Problem vor.