【发布时间】:2019-01-31 11:20:35
【问题描述】:
我是 Spring、Hibernate、JPA 和它的 API 的新手。我创建了一个@RestController,相关的方法是这样的,
@GetMapping("/user")
public ResponseEntity getListItemById(){
UserTypeEntity entity = userTypeRepository.findFirstByUserTypeId(1);
return ResponseEntity.ok().body(entity);
}
UserTypeEntity 有 2 个惰性吸气剂,
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
public UserEntity getUserByUserId() {
return userByUserId;
}
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_type_list_item_id", referencedColumnName = "list_item_id", nullable = false)
public ListItemEntity getListItemByUserTypeListItemId() {
return listItemByUserTypeListItemId;
}
ListItemEntity 和 UserEntity 的所有属性都是 null,除非我使用 JOIN FETCH 查询。我已经检查并验证了那个。
(任何有经验的人都可能熟悉)
看起来像以下。
这是我用来获取的示例响应,
(抱歉,由于数据响应大,甚至无法格式化,虽然我在每个表中只有一行。这是无限递归(StackOverflowError))
一切最终都会被加载。我无法确定这里到底出了什么问题。为什么这些惰性空属性被加载,我得到了这个奇怪而模糊的响应?我已经浪费了一整天的时间,请帮助摆脱这个。
【问题讨论】:
-
有什么问题? (我在该图像中看不到任何空值)
-
抱歉,由于数据响应大,它甚至无法格式化,尽管我在每个表中都有单行。似乎大量重复 是的,它可以。 JSON 的内部部分仍然是有效的 JSON,因此只需剪切相关部分并格式化即可。
-
目前还不清楚您的问题到底是什么。
-
@Antoniossss 这是问题所在。
ListItemEntity和UserEntity的所有属性都是空的。但是作为响应,这些属性被加载并返回:( -
再次,我在这里看不到空值。您会看到它们的响应,因为它们是延迟加载的。我只假设您的意思是“字段”是空值 - 为什么不是?你没有初始化那些。