파워노트

[JPA] 양방향 연관관계시 주의.. 본문

spring boot

[JPA] 양방향 연관관계시 주의..

파워킴 2020. 8. 4. 14:57
반응형

* Entity Class 

==> Lombok 사용시 주의. 

==> ToString() method 사용시 주의  무한 루프 위험있음. stackoverFlow 현상 발생함.

 

* Controller return Response 객체로 Entity 객체를 사용하지 말아라..

=> Rest Api 등에서 ResponseEntity<UserEntity> 등의 리턴 값이 존재 할경우 Json parser에 의해서 에러가 발생할 수 있다.

    ( fetch = FetchType.LAZY 등의 설정시 문제됨 )

 

[UserDevice Controller ] Json parsing 오류 발생함.

    @PostMapping(value = "/userdevice")
    public ResponseEntity<UserDeviceEn> registUser(@RequestBody ReqUserDevice param) {
        log.info("userId {}", param.getUserid());
        log.info("deviceId {}", param.getDeviceid());
        UserDeviceEn userdevice = userDeviceService.registUserDevice(param.getUserid(),param.getDeviceid() );

        return ResponseEntity.ok(userdevice);
    }

[ User Entity ]

    @OneToMany(mappedBy = "device", fetch = FetchType.LAZY)
    private List<UserDeviceEn> userlist = new ArrayList<>();

[ Spring Server Error Message ]

Could not write JSON: failed to lazily initialize a collection of role: xxxx, could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: xxxx.devicelist, could not initialize proxy - no Session (through reference chain: xxxx["user"]->xxxx["devicelist"])]

 

** [ 수정사항 ]**   

UserDeviceEn -> UserDeviceDto 로 Controller return 값을 변경해줌.

    @PostMapping(value = "/userdevice")
    public ResponseEntity<UserDeviceDto> registUser(@RequestBody ReqUserDevice param) {
        log.info("userId {}", param.getUserid());
        log.info("deviceId {}", param.getDeviceid());
        UserDeviceDto userdevice = userDeviceService.registUserDevice(param.getUserid(),param.getDeviceid() );

        return ResponseEntity.ok(userdevice);
    }
반응형

'spring boot' 카테고리의 다른 글

[STS] Spring Tool Suite 설치 방법  (0) 2021.08.03
[spring] 비동기 처리 정리.  (0) 2021.04.22
[intelij] spring boot 프로젝트 생성하기  (0) 2020.06.13
Security Filter  (2) 2020.04.17
UserDetailService  (0) 2020.04.17
Comments