如何将自定义 sql 附加到 Spring 数据 JPA insert/update

How to append custom sql to Spring Data JPA insert/update

根据 IBM's docs,为了让我做 inserts/updates,我需要附加一些 sql(with NCwith NONE)来更新并插入语句。

我正在我的 CrudRepository 上调用 S save(S entity) 方法来进行保存。 我可以稍微扩展一下以附加所需的 sql 吗?

我知道我可以编写自己的自定义 insert/update 语句,但如果我可以附加到生成的 sql 上,那就太好了。

我通过扩展 Hibernate 的 EmptyInterceptor 并重写 String onPrepareStatement(String sql) 方法成功地获得了想要的结果。

public class MyInterceptor extends EmptyInterceptor {

    @Override
    public String onPrepareStatement(String sql) {
        if (sql.startsWith("insert") || sql.startsWith("update")) {
            sql += " with none";
        }
        return sql;
    }
}

我还必须在 application.properties:

中指定这个拦截器
spring.jpa.properties.hibernate.ejb.interceptor=fully.qualified.name.MyInterceptor

请注意 EmptyInterceptor 实现了 Interceptor 接口,并且 onPrepareStatement 方法已在接口中标记为已弃用。

建议改用 StatementInspector 接口,但我不知道如何使用 Spring Boot.所以,如果你成功了,请分享。

更新

您可以在 application.properties:

中指定 StatementInspector 的实现
spring.jpa.properties.hibernate.session_factory.statement_inspector=fully.qualified.name.MyStatementInspector