hibernate - 自定义 SELECT @Query json 键

标签 hibernate jpa spring-data-jpa spring-data

我正在执行 JPQL 查询,类似这样

@Repository
@Transactional
public interface UserFlightDao extends CrudRepository<UserFlight, Long> {
    @Query("SELECT uf.departureGps, uf.flight.id, uf.flight.flightNumber, uf.flight.airline.name, uf.flight.departureDate, " +
            "uf.flight.departureAirport.name FROM UserFlight uf WHERE user.id=?1")
    List<UserFlight> getUserFlights(Long userId);
}

UserFlight包含 Flight对象,我从 UserFlight 中选择值和Flight对象并将它们作为 json 返回给用户。

首先,我认为使用 List<UserFlight> 是错误的作为返回类型(即使它有效),因为从技术上讲我没有返回完整的 UserFlight对象。正确的?也许我应该切换到 List<Object> .

第二件事,我希望返回给用户的 json 包含键名称。目前,我得到的 json 包含对象数组,但没有它们各自的键名称。响应示例:

[
  [
    "sdf",
    1,
    234234,
    "American Airline",
    {
      "dayOfMonth": 13,
      "dayOfWeek": "TUESDAY",
      "dayOfYear": 286,
      "monthValue": 10,
      "month": "OCTOBER",
      "year": 2015,
      "hour": 18,
      "minute": 41,
      "nano": 0,
      "second": 39,
      "chronology": {
        "id": "ISO",
        "calendarType": "iso8601"
      }
    },
    "dummy airport"
  ],
  [
    "asfsaf",
    1,
    234234,
    "American Airline",
    {
      "dayOfMonth": 13,
      "dayOfWeek": "TUESDAY",
      "dayOfYear": 286,
      "monthValue": 10,
      "month": "OCTOBER",
      "year": 2015,
      "hour": 18,
      "minute": 41,
      "nano": 0,
      "second": 39,
      "chronology": {
        "id": "ISO",
        "calendarType": "iso8601"
      }
    },
    "dummy airport"
  ]
]

知道如何获取键名称和值吗?我应该在收到List<Object>后手动构建json吗?从存储库还是有更简单的方法?

这就是我打电话的方式getUserFlights

@RequestMapping(value = "/user_flights", method = RequestMethod.POST) List<UserFlight> getUserFlights() {
        return userFlightDao.getUserFlights(new Long(1));
    }

最佳答案

如果您只需要 UserFlight 的列子集,则需要创建实体 UserFlight 的更轻版本,将其命名为 UserFlightLight。返回上述查询的该实体。这可能是一个小工作,但这确实可以帮助您避免返回对象类型时可能遇到的所有其他问题。

关于hibernate - 自定义 SELECT @Query json 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33130183/

相关文章:

java - 使用 Spring JPA 存储库进行不同计数

java - Spring Data JPA - 将 findAll 与 MySQL 一起使用时出现异常

java - JPA中表之间的关系是如何设置的?

java - 如何在 hibernate 中获取具有不同 HQL 的 POJO 列表?

java - 记录针对 MySQL 数据库的长时间运行的查询?

java - Java中按日期字段对对象列表进行排序

java.lang.StackOverflowError : null for the jpa saveAll

java - @JoinColumnS 涉及一对一关系中的 EAGER 获取

java - 访问 JPA 实体中的父实体

spring - 新的 Spring Data JDK8 Jsr310JpaConverters 不能自动工作?