如何将自定义sql附加到Spring Data JPA插入/更新



根据IBM的文档,为了让我进行插入/更新,我需要附加一些sql(with NCwith NONE(来更新和插入语句。

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

我知道我可以编写自己的自定义插入/更新语句,但是如果我能附加到生成的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

最新更新