Mysql
 sql >> Datenbank >  >> RDS >> Mysql

$filter funktioniert nicht in JPA/Olingo 2.0.11 mit MySQL

Löst das ursprüngliche Problem nicht und ist nicht der effizienteste Weg ... aber hier ist eine Problemumgehung, wie Sie die falsche 'escape'-Anweisung mit nur einem Schrägstrich entfernen können:

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 \'\\'", "");
    }
}

Dadurch wird die inspect-Methode überschrieben und Sie können die generierte SQL-Abfrage ändern, wenn Sie den Ruhezustand verwenden

In meiner Datei persistence.xml muss ich dann die Eigenschaft "hibernate.session_factory.statement_inspector" setzen, um meine StatementInspector-Implementierung mit meiner Hibernate-Session-Factory zu verbinden

<property
                name="hibernate.session_factory.statement_inspector"
                value="SqlStatementInspector" />

Ich weiß nicht, wie genau das mit Spring-Boot funktionieren würde, aber vielleicht gibt es eine ähnliche Eigenschaft für Ihre application.properties?