일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JavaScript
- springboot
- 퇴사후공무원
- react
- tomcat7
- ubuntu자바설치
- gradle
- 서울숲누룽지통닭구이
- 한성대맛집
- 공무원
- 뚝섬역맛집
- 성북구맛집
- 성신여대맛집
- 스페인여행
- 통영여행
- 방이편백육분삼십성신여대
- 통영예쁜카페
- 한남동맛집
- 자바스크립트에러처리
- ELK
- 국가직
- 통영
- 성신여대편백집
- 영화추천
- 파이썬
- 꼴뚜기회
- 돈암동맛집
- npm
- 통영에어비앤비
- 방이편백육분삼십
- Today
- Total
코린이의 기록
[hibernate] org.hibernate.event.internal.DefaultLoadEventListener - HHH000327: Error performing load command 본문
[hibernate] org.hibernate.event.internal.DefaultLoadEventListener - HHH000327: Error performing load command
코린이예요 2019. 2. 19. 19:52org.hibernate.event.internal.DefaultLoadEventListener - HHH000327: Error performing load command
Service Implement 부분에서 SQL 실행하다가 발생한 오류
1 2 3 4 5 | @SuppressWarnings("unchecked") public List<DeviceSwVersion> findByDeviceId(String deviceId) { return super.entityManager.createQuery("select r from DeviceSwVersion r where r.deviceSwVersionPK.id = :id").setParameter("id", deviceId) .getResultList(); } | cs |
아무리 봐도 Query문은 문제가 없는것 같다.
원인이 무엇일까... 삽질 하다가
아래 ManyToOne annotation에서 "fetch = FetchType.LAZY"를 뺐더니 제대로 동작하였다.
1 2 3 4 | /*@ManyToOne(fetch = FetchType.LAZY, optional = false)*/ @ManyToOne(optional = false) @JoinColumn(name = "swVersionId", referencedColumnName = "id", insertable = false, updatable = false) private SwVersion swVersion; | cs |
여기서 FetchType.LAZY는 무엇을 의미하는가?
를 알기전에 즉시로딩 & 지연로딩의 의미를 알아야한다.
즉시로딩
엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티도 함께 조회
지연로딩
엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티를 실제 사용할 때 조회
위 SwVersion은 deviceSwVersion과 연관관계가 있다. (@ManyToOne과 @OneToMany 어노테이션쪽을 보면 알 수 있다.)
1 2 | @OneToMany(cascade = CascadeType.ALL, mappedBy = "swVersion") private List<DeviceSwVersion> deviceSwVersion = new ArrayList<DeviceSwVersion>(); | cs |
즉시 로딩으로 조회할경우,
deviceSwVersion의 엔티티를 조회할때 동시에 swVersion에 속한 엔티티를 동시에 조회하게 된다.
하지면 여기서 지연로딩 옵션을 설정하여 지연로딩으로 조회하게될 경우 실제적으로 DB에서 swVersion속한 엔티티를 조회하지 않는다. 대신 deviceSwVersion 엔티티의 swVersion변수에 프록시 객체를 넣어둔다. 이 프록시 객체는 실제 사용될때까지 DB를 조회하지 않고 데이터 로딩을 미루어 지연 로딩을 하게 된다.
그래서..?
지연로딩을 하면 조회가 안되고 지연로딩으로 조회를해야 제대로 동작하는지 원인은 조금더 살펴보아야 할것 같다 ㅠㅠ
Reference : https://lng1982.tistory.com/278
Reference : https://victorydntmd.tistory.com/210
'Framework > hibernate' 카테고리의 다른 글
[Hibernate] org.springframework.dao.EmptyResultDataAccessException: No entity found for query; (0) | 2018.07.09 |
---|