首页 > 解决方案 > 优化回答休息 springboot/jhipster

问题描述

奇怪的事情发生了。我使用 jhipster 方法来调用 getAll 对象实例的其余服务。调试我看到对象已满,即填充了其他实体的外键。

例如,实体 Car 有一个指向生产汽车的公司的公司外键。所以我看到:

return ResponseEntity.ok().headers(headers).body(page.getContent());

page.getContent() 有一个数组,包含公司 1、52、1 的 3 辆车(所以我看到 car1.getFirm().getDescription()==> "XXX"、"YYY"、"XXX")。没关系。但是当我看到 json 到达我的浏览器时,我看到“XXX”、“YYY”、null。扩展,我看不到在同一请求的其他响应记录中已经“使用”的公司。

关于为什么会发生这种情况的任何想法?

PS 这里是我在 System.out 中看到正确描述的休息服务代码:

@GetMapping("/cars")
public ResponseEntity<List<Car>> getAllCars(CarCriteria criteria, Pageable pageable) {
    log.debug("REST request to get Cars by criteria: {}", criteria);
    Page<Car> page = carQueryService.findByCriteria(criteria, pageable);
System.out.println("---------------------------------------------");
for (Car car:page.getContent()) {
    System.out.println(car.getIdFirm().getDescription());
}
System.out.println("---------------------------------------------");
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
    return ResponseEntity.ok().headers(headers).body(page.getContent());
}

标签: springspring-boothibernatejacksonjhipster

解决方案


如果关系是 Hibernate 延迟加载的,那么当您在控制台或调试器下打印它们时,您会加载它们并且它们是非空的。通过设置show_sql为 true,您应该会看到正在执行的附加 select 语句。根据您的实体使用的 JSON 注释,Jackson 不会序列化它们。


推荐阅读