【问题标题】:Spring MVC, Select Special Columns in Native SELECT QuerySpring MVC,在本机 SELECT 查询中选择特殊列
【发布时间】:2020-02-02 17:22:13
【问题描述】:

这是我在存储库中的原生 SELECT 查询

     @Modifying
 @Query(value = "SELECT * FROM tasks  WHERE title LIKE '%Java%' ORDER BY id DESC ", nativeQuery = true)
 List<Task> listAllTasks();

这没问题,但是当我使用自定义列名而不是 * 时,就像这样

     @Modifying
 @Query(value = "SELECT title FROM tasks  WHERE title LIKE '%Java%' ORDER BY id DESC ", nativeQuery = true)
 List<Task> listAllTasks();

我有这个错误: org.postgresql.util.PSQLException: 在这个 ResultSet 中找不到列名 id。

有什么帮助吗?

【问题讨论】:

  • include id nice you have it in order by
  • 编辑了您的问题以添加 hibernate 和 spring-data-jpa 标记。该问题与这些主题相关,而不是 mvc。

标签: spring hibernate model-view-controller spring-data-jpa


【解决方案1】:

结果集中没有“id”,您必须提供它。

您应该更改声明 SQL 的方式:

SELECT t.title, t.id FROM tasks t WHERE t.title LIKE '%Java%' ORDER BY t.id DESC 

查看这个排序示例:Native Queries

【讨论】:

    【解决方案2】:
    1. 从实体中选择 * -> 返回实体列表

    例子:

    @Query(select * from tasks)
    
    List<Task> findAllTasks();
    
    1. 从实体中选择列 -> 返回实体的类型列表。

    例子:

    @Query(select t.title from tasks t)
    List<String> findTitle_AllTasks();
    

    标题是字符串类型

    1. 从实体中选择多个列 -> 返回一个保存数据的 Object[]

    例子:

    @Query(select t.id, t.title from tasks t)
    List<Object[]> findIdTitle_AllTasks();
    

    因此,您正在检索字符串类型数据 - 标题并要求返回任务类型列表。这导致了问题。您实际上可以查看 HQL 和 JPQL 下的 hibernate 文档来了解这一点。

    另外,您正在执行 SELECT(DQL 操作)。 @Modifying 在这里是基本的,因为它用于使用 Data JPA - UPDATE/DELETE 进行 DML 操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多