使用 Spring DATA JPA 创建自定义查询?

新手上路,请多包涵

我正在使用 Spring Data JPA 开发一个项目。我在数据库中有一个表作为 my_query。

我想创建一个将字符串作为参数的方法,然后将其作为数据库中的查询执行。

方法:

 executeMyQuery(queryString)

例如,当我通过

queryString= "SELECT * FROM my_query"

那么它应该在数据库级别运行该查询。

存储库类如下。

 public interface MyQueryRepository extends JpaRepository<MyQuery, Long>{
    public MyQuery findById(long id);

    @Modifying(clearAutomatically = true)
    @Transactional
    @Query(value = "?1", nativeQuery = true)
    public void executeMyQuery(String query);

}

然而,它并没有像我预期的那样工作。它给出了以下错误。

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ''select * from my_query;'' at line 1

有没有其他方法可以实现这个目标。提前致谢

原文由 B378 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 699
2 个回答

您可以参数化的唯一部分是 WHERE 子句中使用的值。考虑 官方文档 中的这个示例:

 public interface UserRepository extends JpaRepository<User, Long> {
  @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
  User findByEmailAddress(String emailAddress);
}

原文由 ilya 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你想添加自定义查询,你应该添加 @Param

 @Query("from employee where name=:name")
employee findByName(@Param("name)String name);
}

此查询将选择匹配的唯一记录 name 。这将起作用

原文由 milan zadfiya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题