"비영속 객체(Transient Object)"와 "영속 객체(Persistent Object)"는 주로 ORM(Object-Relational Mapping) 프레임워크에서 사용되는 개념입니다. 이 용어들은 객체의 상태가 데이터베이스와 어떤 관계를 맺고 있는지를 나타냅니다. Java에서는 Hibernate와 같은 ORM 프레임워크에서 자주 접할 수 있는 용어입니다.
1. 비영속 객체 (Transient Object)
- 비영속 객체는 데이터베이스와 연관되지 않은 상태의 객체입니다.
- 객체가 메모리 상에 존재하지만, 아직 데이터베이스에 저장되지 않았거나, 이미 데이터베이스에서 삭제된 경우를 의미합니다.
- 비영속 객체는 JPA 엔티티 매니저의 관리 대상이 아닙니다. 따라서 데이터베이스와 동기화되지 않으며, 데이터베이스에서 자동으로 변경 사항이 반영되지 않습니다.
특징:
- 데이터베이스에 저장되지 않았거나 데이터베이스와의 연결이 끊긴 객체.
- 메모리에서만 존재하며, 영속성 컨텍스트에 포함되지 않습니다.
- 예를 들어,
new
키워드를 사용하여 객체를 생성했을 때, 해당 객체는 비영속 상태에 있습니다.
예시:
Employee employee = new Employee();
employee.setName("John Doe");
// 이 시점에서 employee 객체는 비영속 상태입니다.
2. 영속 객체 (Persistent Object)
- 영속 객체는 데이터베이스와 연관된 상태의 객체입니다.
- 객체가 데이터베이스에 저장되어 있고, JPA의 영속성 컨텍스트에 의해 관리되고 있는 상태입니다.
- 영속 객체는 데이터베이스의 상태와 동기화되며, 객체의 변경이 자동으로 데이터베이스에 반영될 수 있습니다.
특징:
- 데이터베이스에 저장되어 있고 영속성 컨텍스트에 의해 관리되는 객체.
- 객체에 대한 변경이 자동으로 영속성 컨텍스트를 통해 데이터베이스에 반영될 수 있습니다.
- 엔티티 매니저에 의해 관리되며,
persist()
,merge()
,find()
와 같은 메서드를 통해 영속 상태로 전환됩니다.
예시:
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
Employee employee = new Employee();
employee.setName("John Doe");
em.persist(employee); // employee 객체는 이제 영속 상태입니다.
em.getTransaction().commit();
3. 기타 상태
- 준영속 객체 (Detached Object): 한때 영속 상태였으나, 현재는 영속성 컨텍스트에서 분리된 상태의 객체를 의미합니다. 데이터베이스와의 연결이 끊겼지만, 메모리 상에 여전히 존재합니다.
- 삭제된 객체 (Removed Object): 영속성 컨텍스트에 의해 삭제가 예약된 상태의 객체로, 데이터베이스에서 제거될 예정입니다.
요약
- 비영속 객체: 메모리에만 존재하고, 데이터베이스에 저장되지 않은 상태의 객체.
- 영속 객체: 데이터베이스에 저장되어 있으며, JPA의 영속성 컨텍스트에 의해 관리되는 객체.
이 개념들은 ORM 프레임워크를 사용할 때 데이터베이스와 객체의 상태를 이해하고 관리하는 데 매우 중요합니다.
Share article