2012-01-07 2 views
1

를 삽입 한 후 반영 ID 엔티티 클래스에 반영되어 발생하지만, 버전 재산 안한다 여전히 null을 나타내면 엔티티 클래스에 반영되지 않습니다.버전 속성은, 내가 사용하는 경우 <strong>em.persist()</strong> 엔티티 클래스의 새로운 인스턴스를 삽입하는 새로운 인스턴스를

저는 GlassFish 3.1.1을 사용하고 있습니다.

부분 엔티티 클래스 코드

@Id 
@GeneratedValue 
private Long id; 

@Version 
private Long version; 

public void create(Item item) { 

    System.out.println("Before Creating " + item.id + ", " + item.version); 
    entityManager.persist(item); 
    System.out.println("After Creating " + item.id + ", " + item.version); 
} 

은 지속 문 다음() 표시 item.id은 1를 도시하지만 체크 경우 item.version은 비록 나타낸다 데이터베이스는 입니다.

이 방법으로되어 있거나 버그입니까?

+0

[JPA @ 버전 행동] (http://stackoverflow.com/questions/5258585/jpa-version-behaviour) – Lion

+0

@Lion : 감사합니다. –

답변

3

persist() 데이터베이스에 엔터티를 삽입하지 않습니다. 그리고 persist()이 호출 된 후에도 ID가 할당 된 것은 아닙니다.

일시적인 엔터티를 엔터티 관리자에 연결하는 것은 지속됩니다. 플러시 시간에 버전이 할당됩니다.

트랜잭션이 커밋되기 전에 실제로 새 버전이 필요한 경우 flush() 명시 적으로 호출 한 다음 새 버전을 가져옵니다. 그러나 일반적으로 버전 필드를 직접 처리 할 필요가 없으므로 필요하지 않습니다. 트랜잭션을 커밋하면 플러시가 수행되고 버전이 할당됩니다.

+0

늦게 업데이트하여 죄송합니다. 전혀 다른 주제로 무언가 잡혔다! 네가 맞습니다. 궁금해 어떤 해결 방법이 있다면, 내가 커밋하기 전에 ID/버전이 필요합니다. 감사합니다. –

+0

해결 방법은 내 대답은 : 명시 적으로 플러시 호출하십시오. –

관련 문제