2013-01-02 2 views
2

두 필드 'from'과 'to'을 bp으로 업데이트해야합니다. pbp과 함께 가져오고 있습니다. 자동 플러싱이 비활성화되어 있으므로 명시 적으로 플러시를해야합니다. save() 방법은 unique key constraint 위반하는 새로운 레코드를 삽입하려고 나는이 세척하기 전에 p을 저장할 수 없습니다하이버 네이트 세션 메소드를 사용하여 매핑 된 엔티티 클래스의 인스턴스를 업데이트하는 방법은 무엇입니까?

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: model.P 

: 내가 위의 코드를 실행하면

 Query q = session 
       .createQuery(" select distinct bp from BP bp " 
         + " join fetch bp.p " 
         + " where bp.id = 2"); 

     bp = (BP) q.list().get(0); 
     session.getTransaction().commit(); 

     session = test.services.HibernateUtil 
       .getSessionFactory().getCurrentSession(); 
     session.beginTransaction(); 
     bp.setFrom(new Date()); 
     bp.setTo(new Date()); 
     session.update(bp); 
     session.flush(); 
     session.getTransaction().commit(); 

그것은 다음과 같은 예외를 보여줍니다.

내가 세척하기 전에 p를 업데이트하려고

, 나는 예외 다음있어 :

java.lang.NullPointerException 
    at org.hibernate.type.LongType.next(LongType.java:79) 
    at org.hibernate.engine.Versioning.increment(Versioning.java:131) 

p의 상태가 지속 할 수있는 방법이 있습니까?

+1

해당 개체의'version' 열이 null입니까? – Augusto

+0

예 버전 p는 null입니다. 그러나 bp의 값은 null이 아닙니다. 감사합니다 –

+2

Hibernate는 버전 fild가 null이기 때문에 p가 transint (즉, 데이터베이스에 존재하지 않음)라고 생각합니다. 데이터베이스에서이를 0으로 설정하고 코드를 다시 실행하십시오. –

답변

0

세션을 플러시하기 전에 트랜잭션 커밋을 시도해주십시오.

제대로 작동합니다.

+0

나는 (@Augusto가 지적한대로) 내가했던 실수를 가지고 p의 버전 필드가 null이어서 p가 업데이트되지 않았다. –