-
프록시(Proxy) 객체란? 프록시(Proxy) 객체는 실제 객체의 대리자로서 동작하며, 클라이언트가 실제 객체에 접근하면 프록시 객체를 통해 실제 객체에 접근합니다. 이를 통해 실제 객체에 대한 접근을 지연시킬 수 있고, 필요한 시점에 실제 객체를 로딩하는 등의 성능 향상이 가능합니다.
-
프록시(Proxy) 객체 사용하기 Hibernate에서는 프록시 객체를 생성하고 사용하기 위해
Hibernate.initialize()
또는session.load()
와 같은 메서드를 사용합니다.
2.1 Hibernate.initialize()
메서드 사용하기
@Entity
public class User {
// ...
}
// ...
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// User 프록시 객체 생성
User userProxy = session.load(User.class, userId);
// 프록시 객체의 초기화
Hibernate.initialize(userProxy);
transaction.commit();
session.close();
2.2 session.load()
메서드 사용하기
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// User 프록시 객체 생성
User userProxy = session.load(User.class, userId);
// 프록시 객체에 접근
System.out.println(userProxy.getName());
transaction.commit();
session.close();
위의 예제 코드에서 session.load(User.class, userId)
를 호출하면 프록시 객체가 생성됩니다. 실제로 user 객체를 사용할 때까지는 데이터베이스에서 해당 객체를 로딩하지 않고 프록시 객체를 반환합니다. 실제 객체에 접근하면 프록시 객체는 데이터베이스에서 실제 객체를 로딩하고 작업을 수행합니다.
- 주의할 점 프록시 객체를 사용할 때 주의할 점은 프록시 객체에 접근하는 시점에 데이터베이스 연결이 필요하다는 것입니다. 때문에 세션(Session)이 열려 있는 상태에서만 프록시 객체에 접근할 수 있습니다. 세션(Session)이 종료되면 프록시 객체에 접근할 수 없습니다.
추가로, 프록시 객체에 접근할 때 LazyInitializationException
예외가 발생할 수 있습니다. 이는 프록시 객체가 초기화되지 않은 상태에서 접근하는 경우 발생하는 예외이므로, 프록시 객체에 접근하기 전에 Hibernate.initialize()
를 통해 초기화를 수행해야 합니다.
위의 내용은 Hibernate에서 프록시 객체를 사용하는 방법에 대한 예시입니다. Hibernate 공식 문서 및 관련 자료를 참고하여 더 자세한 내용을 확인할 수 있습니다.