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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将自定义sql附加到Spring Data JPA插入/更新相关的知识,希望对你有一定的参考价值。

根据IBM's docs,为了让我做插入/更新,我需要附加一些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设置它。所以,如果你能做到这一点,请分享。

更新

您可以在StatementInspector中指定application.properties的实现:

spring.jpa.properties.hibernate.session_factory.statement_inspector=fully.qualified.name.MyStatementInspector

以上是关于如何将自定义sql附加到Spring Data JPA插入/更新的主要内容,如果未能解决你的问题,请参考以下文章

Azure Cosmos SQL API - 如何将自定义对象存储为 @PartitionKey

如何将自定义uitableviewcell一一附加到uitableview

如何将自定义方法添加到 spring 集成 ftp 网关接口?

如何将自定义数据从ui-router中的视图传递到某个状态?

如何将自定义密码编码器添加到 Spring Security?

将自定义视图附加到 Android 键盘的顶部