2011-03-11 3 views
0

나는 openjpa와 jpa를 시도하고 있습니다. 데이터베이스에있는 하나의 엔티티 클래스가 해당 테이블입니다. 엔티티의 속성 중 하나는 사용자 이름이고 db 테이블의 해당 행에는 varchar2 (20)가 있습니다. 내 주요 방법으로 내가 돈을 내가 뭐하는 거지 모든 openjpa가 optimisticklockexception을 던졌습니다

em.getTransaction().begin(); 
em.persist(entity); //entity here is the instance with the username longer than 20 
em.getTransaction().commit(); 

내가 예외의 다른 종류를 얻을 수 있었으면,이 시도이다 (20) 보다 긴 이름을 가진 개체의 유지 및 인스턴스려고했는데, 내가 무엇을 왜 optimisticklockexception을 얻고 있지 않습니까?

잠금 설정이 없습니다. 나는 속성을 잠그기 위해 기본값을 사용하고있다.

여기 무슨 일이 일어나는지 아는 사람 있습니까?

+0

:

당신의 엔티티 빈에서이 추가 (또한 테이블에 VERSION라는 이름의 열을 추가) 전자 스택 추적 및 귀하의 법인? OpenJPA의 어떤 버전입니까? 엔티티는 어떻게 강화하고 있습니까? – Rick

답변

0

이런 이유는 확실하지가 ... 나는 종종는 OpenJPA가 잠금으로 더 잘 작동 할 수있는 테이블과 엔티티 버전 ​​필드를 추가

... OptimisticLockException 이상한 경우에 발생 될 수있는 것으로 나타났습니다 .. .이 도움이

private Long version; 
@Version 
@Column(name="VERSION") 
public Long getVersion() { 
    return version; 
} 
public void setVersion(Long version) { 
    this.version = version; 
} 

희망 ... 당신이 entir을 게시에 대해 어떻게

+0

아니요, 작동하지 않았습니다. 나는 올바른 데이터를 사용하면 완벽하게 작동하도록 노력했다. 새로운 인스턴스가 지속되면 버전이 1로 설정되고 다음으로 행이 검색되면 몇 가지 변경 사항이 적용됩니다. 다시 작동하면 버전이 자동으로 2로 증가합니다. – BeeRung

+0

죄송합니다. 실수로 엔터를 누릅니다. . 또한 유효하지 않은 데이터 (예 : 값이 20보다 큰 문자열, 문자열이있는 입력란)를 사용하여 계속 유지하고 인스턴스화하려고하면 다시 동일한 OptimisticLockException을 발생시킵니다. 나는 더 적절한 예외가 도움이 될 것이라고 생각하고 있었다. – BeeRung

관련 문제