📖EntityManager.getReference() 활용하여 Entity 참조
Log라는 엔티티를 저장해야 하는데, User와의 연관관계를 맺기 위해 필요한 건 userId 하나뿐이고, 굳이 DB에서 User 전체 정보를 조회할 필요가 없는 상황이 생긴다.Log 엔티티는 User와 연관관계를 가지고 있다 (예: @ManyToOne)logSaveDto는 프론트에서 넘어온 요청이고, userId만 담겨 있다User 전체 데이터를 조회할 필요 없이 userId 정보만으로 Log를 저장하고 싶다// userId만 가지고 있기 때문에, 전체 User를 조회하지 않고 reference만 가져온다
User userRef = entityManager.getReference(User.class, dto.getUserId());
// DTO -> Entity 변환 시, user를 참조만 연결
Log log = logSaveDto.toEntity(userRef);
// 이후 log 저장
logRepository.save(log);
| 방식 | 설명 |
|---|---|
find() | 실제 DB 조회가 일어나고, 해당 데이터를 메모리에 로딩함 |
getReference() | 실제 조회 없이 프록시 객체를 반환함 (실제 데이터는 사용될 때 로딩됨) |
getReference()는 데이터가 필요 없고, 단순히 관계만 맺을 때 효율적인 방법이다.save()나 연관관계 연결에만 필요할 경우 매우 유용하다.getReference(Class<T>, Object primaryKey)
LazyInitializationException이 날 수 있음getReference()가 깔끔하고 효율적이다.find()를 써야 한다.