Chu*_*ton 6 spring isolation-level spring-data
我正在使用Spring Data Repository接口从DB2(z/OS)检索数据.我有几个依赖方法signatues的方法和一个依赖于显式@Query的方法.
如何使生成的SQL具有"WITH UR"子句?我在@Query注释上方的行上添加了@Transactional(isolation = Isolation.READ_UNCOMMITTED),并且在两个方法之上,但它似乎没有将子句附加到生成的SQL.
谢谢
我发现在逐个查询的基础上执行此操作的唯一方法是通过使用 Hibernate 注释提示和自定义方言。
我正在使用 Spring Boot 2.7 和 spring-data-jpa 2.7.12。
在您的 Repository 界面中,在 Repository 方法上方使用@QueryHints和 @QueryHint 注释。
@QueryHints(value = {
@QueryHint(name=org.hibernate.jpa.QueryHints.HINT_COMMENT, value=DB2zOSCustomDialect.UNCOMMITTED_READ)})
Optional<MyEntity> findByProperty(String property);
Run Code Online (Sandbox Code Playgroud)
自定义方言类应该从 DB2390Dialect 扩展,下面提供了一个直接的实现(未经过彻底测试)。
public class DB2zOSCustomDialect extends DB2390Dialect{
Logger logger = LoggerFactory.getLogger(getClass());
public static final String UNCOMMITTED_READ = "with ur";
@Override
public String addSqlHintOrComment(java.lang.String sql, QueryParameters parameters, boolean commentsEnabled){
String uncommittedRead = parameters.getComment();
if(uncommittedRead != null && uncommittedRead.equalsIgnoreCase(UNCOMMITTED_READ)) {
parameters.setComment(null);
return super.addSqlHintOrComment(sql, parameters, commentsEnabled) + " " + UNCOMMITTED_READ;
} else {
return super.addSqlHintOrComment(sql, parameters, commentsEnabled);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要逐个检查查询,则从 DB2390Dialect 扩展的自定义 Dialect 覆盖Dialect类中的transformSelectString方法就足够了。
归档时间: |
|
查看次数: |
671 次 |
最近记录: |