如何将自定义sql附加到Spring Data JPA插入/更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将自定义sql附加到Spring Data JPA插入/更新相关的知识,希望对你有一定的参考价值。
根据IBM's docs,为了让我做插入/更新,我需要附加一些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设置它。所以,如果你能做到这一点,请分享。
更新
您可以在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中的视图传递到某个状态?