避免在ResponseEntity中获取惰性属性

时间:2019-01-31 11:20:35

标签: spring hibernate rest jpa

我是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;
    }

的所有属性ListItemEntityUserEntitynull,直到并且除非我使用JOIN FETCH的查询。我已经检查和验证了一个。 (任何有经验的人都可能熟悉) 看起来像下面。

下面是我使用以获得样本响应,

Response

(对不起,由于数据响应大,它甚至无法格式化,尽管我在每个表中只有一行。它是无限递归(StackOverflowError))

一切最终加载。我无法确定这里到底出了什么问题。为什么加载了这些懒惰的null属性,却得到了这个奇怪而模糊的响应?我已经浪费了整整一天在此,plz帮助拿到了这一点。

1 个答案:

答案 0 :(得分:0)

将注释从getter移至字段声明,您将看到一致的结果。

编辑后: @ShreeKrishna是我的意思。现在,我可以提供明确的解释,这是预期的行为。调试器会向您显示实际是什么字段,哪些是字段,并且因为您的惰性初始化触发器是在GETTER方法上,而不是在字段上,所以它将为null。因此,只要您将通过getter而不是直接访问来访问属性,就不必关注调试器向您显示的内容了。