我知道在JPA查询中动态修改表名和列名是不可能的。它们必须是硬编码的。
但是,我有一个架构,它有许多不同的表,前三列的结构都相同。而不是必须编写一个类或方法来查询每个这些,我想知道是否有使用变量修改表名和列名的快速黑客?我现有的查询如下:
public interface ExampleRepository extends JpaRepository<Example, Long>,
JpaSpecificationExecutor<Example> {
@Query(value = "SELECT name_ln FROM ?1 WHERE ?2 = ?3",
nativeQuery = true)
String getName(String tableLookUp, String idColumn, long namespaceRefId);
}
这不起作用,由于表和列名称的引号,MySQL产生以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''table_name' WHERE 'column_id' = 211833' at line 1
答案 0 :(得分:0)
您可以尝试对查询中的传递值使用参数注释。
例如:
@Query(value = "SELECT name_ln FROM :tableName WHERE :columnName = :value", nativeQuery = true)
String getName(@Param("tableName") String tableLookUp, @Param("columnName") String idColumn, @Param("value") long namespaceRefId);
确保查询结果将是一条记录。这可能会导致错误。