Whiteship's Note

'The persistence lifecycle'에 해당되는 글 1건

  1. 2006.12.27 1-8. Hibernate Application 에서 사용되는 객체의 상태

1-8. Hibernate Application 에서 사용되는 객체의 상태



사용자 삽입 이미지

Hibernate In Action 4.1.1 Transient Object 처음에 나오는 그림입니다. Hibernate에서 사용되는 객체의 상태 변화를 보여주고 있습니다.
  • Transient는 DB와 아무 연관이 없는 상태입니다.
  • Persistent는 DB와 동기화 되어 있는 상태입니다.
  • Detached는 DB와 동기화 된 적이 있는 상태입니다.
소스코드와 연관 시켜 보겠습니다.
        Pizza pizza = new Pizza();
        pizza.setName("ines's pizza");
        pizza.setPrice(10000);
        pizza.setSize("Large");
        pizza.setToping("Kimchi");

        s.save(pizza);

        pizza.setPrice(15000);

        tx.commit();
        s.close();

        pizza.setPrice(20000);

위 소스크드와 그림을 보시면서 Pizza 객체의 상태를 추적해 보겠습니다. 먼저 new를 하여 객체를 생성하게 되면 이 객체는 transient 상태가 됩니다. 그 후에 s.save(pizza);를 하게 되면 Persistent 상태가 되는데 그렇기 때문에 이 전 글에서 s.update(pizza); 를 호출하지 않아도 DB와 동기화 되어 있는 상태이기 때문에 update가 된 것 같습니다. 그 뒤 s.close()를 호출하면 그 뒤 부터는 DB와 동기화 된 적은 있지만 현재는 그렇지 않은 Detached 상태가 됩니다.
new를 만나면 Transient => save() 이후 부터는 Persistent => close() 이후 부터는 Detached 상태 입니다.

Transient 상태와 Detached 상태의 차이점은 Transient 상태에서 Pizza의 pizzaId라는 속성은 null인 상태입니다. 하지만 Detached 상태는 DB와 동기화 된 적이 있기 때문에 pizzaId 속성에 값을 가지고 있습니다.

top