如何将自定义 sql 附加到 Spring 数据 JPA insert/update
How to append custom sql to Spring Data JPA insert/update
根据 IBM's docs,为了让我做 inserts/updates,我需要附加一些 sql(with NC
或 with NONE
)来更新并插入语句。
我正在我的 CrudRepository 上调用 S save(S entity)
方法来进行保存。 我可以稍微扩展一下以附加所需的 sql 吗?
我知道我可以编写自己的自定义 insert/update 语句,但如果我可以附加到生成的 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
根据 IBM's docs,为了让我做 inserts/updates,我需要附加一些 sql(with NC
或 with NONE
)来更新并插入语句。
我正在我的 CrudRepository 上调用 S save(S entity)
方法来进行保存。 我可以稍微扩展一下以附加所需的 sql 吗?
我知道我可以编写自己的自定义 insert/update 语句,但如果我可以附加到生成的 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