代码之家  ›  专栏  ›  技术社区  ›  Shahzad

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

  •  1
  • Shahzad  · 技术社区  · 7 年前

    根据 IBM's docs ,为了进行插入/更新,我需要附加一些sql( with NC with NONE )更新和插入语句。

    我打电话给 S save(S entity) 方法在我的CrudRepository上进行保存。 我是否可以对此进行一点扩展以附加所需的sql?

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Shahzad    7 年前

    通过扩展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
    

    请注意 排空接收器 实现 Interceptor 接口,以及 onPrepareStatement 方法已在接口中标记为已弃用。

    建议使用 StatementInspector 接口,但我不知道如何使用Spring Boot进行设置。所以,如果你能做到这一点,请分享。

    使现代化

    您可以指定的实现 语句检查器 在您的 应用属性 :

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