根据IBM的文档,为了让我进行插入/更新,我需要附加一些sql(with NC
或with 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