@Override
public List<RestaurantListSub> findRestaurantListByTagOrKeyWord(String place , String[] tags , String search , int page) {
List<Restaurant> query = queryFactory.select(restaurantTag.restaurant)
.from(restaurantTag)
.where(restaurantTag.tag.tagName.in(tags))
.groupBy(restaurantTag.restaurant)
.having(restaurantTag.restaurant.count().eq((long) tags.length))
.offset(page)
.limit(5)
.fetch();
List<RestaurantListSub> result = new ArrayList<RestaurantListSub>();
for (Restaurant item : query){
List<TagResponse> tagResponseList = new ArrayList<>();
for(RestaurantTag tag: item.getRestaurantTag()){
tagResponseList.add(new TagResponse(tag.getTag().getTagName() , "양식"));
}
RestaurantListSub rls = new RestaurantListSub();
rls.setName(item.getName());
rls.setThumbnail(item.getAddress());
rls.setTags(tagResponseList);
rls.setRestaurantId(item.getRestaurantHash());
result.add(rls);
System.out.println("rls.toString() = " + rls.toString());
}
return result;
}

restaurantTag 에 관련해서 proxy 를 시작할 수 없다고 뜨고 , no session 이라고 한다.
Lazy Loading 을 위해서는 proxy 객체가 필요하다. 맨 처음 query 를 이용해 Restaurant 들을 가져올 때, Restaurant 는 내부에 RestaurantTag 객체를 상속받은 proxy 객체를 갖고 있다.
이후 RestaurantTag 가 실제로 사용될 때, 해당 proxy 객체를 이용하여 restaurantTag 의 정보를 가져온다.
하지만 proxy 객체는 영속성 컨텍스트 내에서만 유효하다. 세션이 끝나면 ( Transaction 이 commit 이나 rollback 되면 ) 해당 영속성 컨텍스트 또한 종료되고 그러면 해당 proxy 객체또한 더 이상 사용이 불가능하다.
위 오류가 뜬 이유는 Restaurant 를 가져오는 순간 영속성 컨텍스트가 종료되었기 때문에 프록시 객체인 restaurantTag 를 관리할 수 있는 영속성 컨텍스트가 존재하지 않기 때문이다. 그러면 어떻게 해야할까?