在 JPQL Native Query 中将查询作为查询参数传递
Passing a query as a query parameter in JPQL Native Query
我正在尝试将查询作为字符串参数传递到另一个 JPQL 本机查询中。
@Query(value = "SELECT (:query)", nativeQuery = true)
BigDecimal getTotal(@Param("query") String query);
所以生成的查询类似于下面的查询 return给我一个值
SELECT (50 * (SELECT COUNT(*) FROM SOMETABLE))
但我在 return 中得到的只是 :query
参数的字符串,而不是执行完整查询的结果。
- 为自定义存储库创建接口
SomeRepositoryCustom
public interface SomeRepositoryCustom {
BigDecimal getTotal(String sql);
}
- 创建
SomeRepositoryCustom
的实现
@Repository
class SomesRepositoryCustomImpl implements SomeRepositoryCustom {
private JdbcTemplate template;
@Autowired
public SomesRepositoryCustomImpl(JdbcTemplate template) {
this.template = template;
}
@Override
public BigDecimal getTotal(String sql) {
return template.queryForObject(sql, BigDecimal.class);
}
}
- 使用
SomeRepositoryCustom
扩展您的 JpaRepository
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {
}
到运行一个查询
someRepository.getTotal("SELECT (50 * (SELECT COUNT(*) FROM SOMETABLE))");
我正在尝试将查询作为字符串参数传递到另一个 JPQL 本机查询中。
@Query(value = "SELECT (:query)", nativeQuery = true)
BigDecimal getTotal(@Param("query") String query);
所以生成的查询类似于下面的查询 return给我一个值
SELECT (50 * (SELECT COUNT(*) FROM SOMETABLE))
但我在 return 中得到的只是 :query
参数的字符串,而不是执行完整查询的结果。
- 为自定义存储库创建接口
SomeRepositoryCustom
public interface SomeRepositoryCustom {
BigDecimal getTotal(String sql);
}
- 创建
SomeRepositoryCustom
的实现
@Repository
class SomesRepositoryCustomImpl implements SomeRepositoryCustom {
private JdbcTemplate template;
@Autowired
public SomesRepositoryCustomImpl(JdbcTemplate template) {
this.template = template;
}
@Override
public BigDecimal getTotal(String sql) {
return template.queryForObject(sql, BigDecimal.class);
}
}
- 使用
SomeRepositoryCustom
扩展您的 JpaRepository
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {
}
到运行一个查询
someRepository.getTotal("SELECT (50 * (SELECT COUNT(*) FROM SOMETABLE))");