当前位置: 首页 > 知识库问答 >
问题:

将数据库配置查询值传递给本机查询

弓玉书
2023-03-14

我有一个配置表,在其中配置select子句查询字符串,我将获得该字符串并运行NativeQuery。

我正在尝试实现一种功能,即使用spring-boot将数据库返回的值传递给本机MySQL/Hibernate查询,但在org.hibernate.exception.SqlGramMareXception:could not extract ResultSet时遇到了问题

ConfigDTO reportsConfigDTO = reportsConfigRepository.getReportByCustomValue();

ConfigDTO有一个名为SelectClause的字段,当运行查询时,我将从数据库获取一个SelectClause值,例如

SELECT * FROM users where  CREATE_DATE > '2019-03-27 19:06:02'

我正在尝试将此值传递给另一个查询。

String query = reportsConfigDTO.getSelectClause();

UserDTO userDTO = userRoleRepository.getReportByCustom(query);

存储库中的本机查询是

@Query(value = ":query",  nativeQuery=true)
public UserDTO getReportByCustom(@Param("query") String query);

因此,基本上,我将这个select*FROM where CREATE_DATE>'2019-03-27 19:06:02'(从上一个查询返回)传递给UserRoleRepository.GetReportByCustom

我做错什么了吗?不确定这是否是正确的方法,

我得到低于sql异常

SQL错误:1064,SQLState:42000 2019-03-31 16:51:00.116错误33850---[Batch]O.H.Engine.jdbc.spi.SQLExCeptionHelper:您的SQL语法有错误;查看与您的MySQL server版本相对应的手册,以了解在线程“Reports”org.springFramework.dao.InvalidDataAccessResourceUsageException:无法提取结果集的第1行异常处的“select*FROM users where CREATE_DATE>\'2019-03-27 19:06:02\'''附近使用的正确语法;SQL[N/A];嵌套异常为org.hibernate.exception.sqlgrammarexception:无法提取ResultSet

共有1个答案

郑功
2023-03-14

传递给@query的查询应该是有效的JPQL。您传递的是一个JPA不理解的SQL查询。因此出现了错误。

你应该这样写:

//Here UserDTO should be your Entity name. 
//Since date is a variable, you should receive it from the caller.
//Here `u` will automatically be an object of UserData pojo.
String QUERY = "SELECT u FROM UserDTO where CREATE_DATE > :date"

@Query(value = QUERY,  nativeQuery=true)
public UserDTO getReportByCustom(@Param("date") LocalDateTime date);

您可以在这里查看JPQL参考--https://docs.oracle.com/html/e13946_04/ejb3_langref.html和https://thoughts-on-java.org/JPQL/

//Some sql-query.properties file added to your classpath
sql.query.userQuery=SELECT u FROM UserDTO where CREATE_DATE > :date

在您的DAO层中这样读:

@Value("${sql.query.userQuery}")
String QUERY;

此外,如果要将查询放入数据库中,则最终必须编写另一个查询来获取它。此外,您将在查询读取上浪费额外的读取时间。

 类似资料:
  • 问题内容: 第一次海报,长期的读者。我花了很长时间寻找答案,这使我认为这是我所缺少的基本知识。 我试图提取保存在数据库表中的数据,并将其传递通过,以显示在Highcharts图中。在检查源代码时,我没有从Django或客户端收到任何错误。 使用:Django 1.7和Python 3.4 views.py: get_data()函数: 模板: 最后的网址: 一切似乎都在运行,但Highchart图

  • 问题内容: 我正在使用RODBC软件包访问R中的sql数据库。我无法找到有关如何将向量从R作为向量传递给sql的任何有用信息。 我想将id向量传递给sql而不是对其进行硬编码。 问题答案: 新包装对此有最佳答案。它允许使用任何R对象,并将其自动转换为SQL https://db.rstudio.com/dplyr/

  • 我有一张地图,用户可以在其中选择一个县。我希望它能够做的是返回“成员”在该县的所有“遭遇”。 唯一的问题是,“county”不是我需要为其返回文档的索引字段(“county”是“member”索引中的字段,而我想从“Conferences”索引中返回文档)(它们由“memberId”链接)。 以下是我目前所做的,在一个县中获得成员。 但这将返回该县成员的文档列表。我需要它返回这些文档的member

  • 问题内容: 给定一个ID数组,我想拥有一个SQL查询,该查询使用WHERE子句中的数组值,例如: 如何生成此查询字符串以用于MySQL? 问题答案: 谨防! 该答案包含一个严重的SQL注入漏洞。在未确保清除任何外部输入的情况下,请勿使用此处介绍的代码示例。

  • 我有一个用户域:1)字符串用户名,2)字符串密码,3)角色[]角色(角色是枚举)。 my UserRepository中的方法如下所示: 这将引发,因为它无法将String转换为Roles,这是一个枚举。如果我摆脱了{0}周围的引号。角色,那么它会抛出这个: 如果User参数可以直接序列化到MERGE查询中,或者以任何方式解析此Roles[],这将是理想的。 有人能帮我吗?我使用的是SDN3.1。

  • 我有一个服务类,它通过使用< code > carrepository . retrieve cars()调用JPA存储库来接收汽车列表。存储库方法使用本地查询来检索记录。 现在我想传递参数< code > carrepository . retrieve cars(Long vinNo,Long serialNo)并在查询中使用它们。我假设我会需要一些东西作为准备好的陈述。然而,我不知道如何实现