为此,我创建了如下查询
@Query(value="SELECT"+ retreiveCol +"FROM"+tableName+"WHERE"+condition, nativeQuery = true)
public Object genericSearch(@Param("retreiveCol") String retreiveCol,@Param("tableName") String tableName,@Param("condition") String condition);
但是得到这个错误:
Hibernate:SELECTFROMWHERE[2m2021-10-23 09:33:09.574][0;39m [33m WARN][0;39m [35m7684][0;39m [2m-][0;39m [2m][nio-8081-exec-3][0;39m [36mo.h.engine.jdbc.spi]sqllexceptionhelper [0;39m] 2m:[0;39m] SQL Error: 42001, SQLState: 42001 .使用实例[2m2021-10-23 09:33:09.574][0;39m [31mERROR][0;39m [35m7684][0;39m [2m- [0;39m [2m]] nio-8081-exec-3][0;39m [36mo.h.engine.jdbc.spi]sqllexceptionhelper [0;39m [2m:[0;39m] SQL语句"SELECTFROMWHERE[*]";预期"设置,保存点,脚本,关机,显示&;SQL语句:SELECTFROMWHERE (42001 - 200)[2 m2021-10-23 09:33:09.586 [0; 39 m [31 merror [0; 39 m [35 m7684 [0; 39 m [2 m, [0; 39 m [2 m [nio - 8081 - exec - 3] [0; [36 mo.a.c.c.c。[。[39米。(/)。[dispatcherServlet] [0;39m] [2m:[0;39m] servlet .service() for servlet [dispatcherServlet] in context with path[]抛出异常[请求处理失败]嵌套异常是org.springframework.dao.InvalidDataAccessResourceUsageException:无法准备语句;SQL (SELECTFROMWHERE);嵌套异常是org.hibernate.exception. sqlgrammareexception: could not prepare statement] with root cause
org.h2.jdbc。SQL语句"SELECTFROMWHERE[*]";预期"设置,保存点,脚本,关机,显示&;SQL语句:SELECTFROMWHERE [42001 - 200]
不确定您是否可以使用Spring Data JPA做到这一点。您的存储库必须键入并绑定到特定的实体。
最重要的是,你的方法将导致一个主要的安全问题,因为它使SQL注入非常容易。
如果您正在寻找基于无限条件构建动态搜索请求的解决方案,我建议您研究spring-boot-starter-data-search。
您可以在这里找到jpa的演示
免责声明:我是spring-boot-start -data-search
的贡献者