如何在不带撇号的情况下将String参数传递给@Query

时间:2018-10-05 18:10:05

标签: java mysql spring-data-jpa

我需要的是将mysql模式作为参数传递给@Query,如示例所示:

@Query
(value = " SELECT id, name FROM " + schema + ".constructions "
,nativeQuery = true)
List<Object> findAllConstructions(String schema);

但是此代码不起作用,因为“模式无法解析为变量”。

问题是,当我尝试正确传递参数时,像这样:

@Query
(value = " SELECT id, name FROM ?.constructions "
,nativeQuery = true)
List<Object> findAllConstructions(String schema);

或者这个:

@Query
(value = " SELECT id, name FROM :schema .constructions "
,nativeQuery = true)
List<Object> findAllConstructions(@Param("schema") String schema);

生成的SQL具有语法错误,因为FROM子句看起来像这样:

FROM 'db_schema'.constructions

应该在什么时候出现:

FROM db_schema.constructions

有人可以帮助我吗?


编辑1 :由于this question建议使用表名,我找不到任何方法(在MySQL中)选择特定的模式名。

编辑2 :我通过创建替代连接并设置如下语句来解决我的问题:

ResultSet rs = connection.createStatement().executeQuery(" SELECT id, name FROM " 
+ schema + ".constructions ");

由于我的解决方案并未真正回答问题,因此我将保留该问题,因此,如果有人找到该问题的答案,则该问题仍处于开放状态。

1 个答案:

答案 0 :(得分:0)

尝试使用表达语言

@Query(value = " SELECT id, name FROM #{#schema}.constructions " ,nativeQuery = true)