元の問題を解決せず、最も効率的な方法ではありません。ただし、スラッシュを1つだけ使用して誤った「escape」ステートメントを削除する方法の回避策は次のとおりです。
public class SqlStatementInspector implements StatementInspector {
private static final long serialVersionUID = 1L;
private static final Logger LOG = Logger.getLogger(SqlStatementInspector.class);
@Override
public String inspect(String sql) {
if (!sql.contains("escape \'\\'")) {
return sql;
}
// OData JPA query correction -> current version (2.0.11) contains
// the invalid 'escape "\"' statement that delivers no results
LOG.info("Replacing invalid statement: escape \"\\\"");
return sql.replace("escape \'\\'", "");
}
}
これにより、inspectメソッドが上書きされ、Hibernateを使用するときに生成されたSQLクエリを変更できます
次に、persistence.xmlファイルでプロパティ「hibernate.session_factory.statement_inspector」を設定して、StatementInspectorの実装を休止状態のセッションファクトリに接続する必要があります
<property
name="hibernate.session_factory.statement_inspector"
value="SqlStatementInspector" />
これがspring-bootでどのように機能するかはわかりませんが、application.propertiesに同様のプロパティがあるのではないでしょうか?