2017-02-17 5 views
2

나는 최대 절전 모드를 처음 사용합니다. 트랜잭션이 커밋되면 동작을 이해하고 싶습니다. 아래 코드를 고려하십시오.Hibernate에서 transaction.commit() 후에 엔티티 객체에 액세스하면 결과는 어떻게됩니까?

Employee 클래스는 개체가 데이터베이스에 삽입/삭제되는 클래스입니다.

public static void main(String[] args) { 

    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
    Session session = sessionFactory.getCurrentSession(); 

    long id = 2; 

try { 
    session.beginTransaction(); 
    Employee employee = (Employee) session.get(Employee.class, id); 
    session.delete(employee); 
    session.getTransaction().commit(); 
    employee.getName(); /*What will happen at this line*/ 
    } 
    catch (HibernateException e) { 
    e.printStackTrace(); 
     session.getTransaction().rollback(); 
} 
} 

답변

1

"일시적"이됩니다. Session 클래스 문서에서

영구 인스턴스() 삭제 가이드에서

를 호출하여 과도를 할 수 있습니다

과도 - 그냥 초기화 되었다면 객체는 일시적이다 new 연산자를 사용하고 Hibernate Session과 관련이 없다. 데이터베이스에 지속적인 표현이 없으며 식별자 값이 지정되지 않았습니다. 응용 프로그램이 더 이상 참조를 보유하지 않으면 일시적인 인스턴스가 가비지 수집기에 의해 파괴됩니다. Hibernate Session을 사용하여 객체를 영속화시킨다 (그리고 Hibernate가이 변환을 위해 실행되어야하는 SQL 문을 처리하게한다).

더 많은 정보를 원하시면 여기를 포인터에 대한 https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html

+0

감사를 살펴 보자. 이것은 커밋 후에 액세스되는 임시 객체가 정상적인 객체처럼 동작하고 getName()이 null 값을 반환한다는 것을 의미합니까? – CuriousDev

+0

getName()가 commit() 전에 null가 아닌 경우는, commit() 후에 null가 아닙니다. – Flood2d