2012-07-25 5 views
8

후 값을 반복하여 생성한다. 그러나 응용 프로그램을 다시 시작하고 레코드를 다시 검색하면 다음 번에이 엔티티를 유지하려고 할 때 최대 절전 모드에서는 응용 프로그램이 다시 시작되지 않을 때 생성 된 동일한 ID를 사용하려고 시도합니다.@GeneratedValue는</p> <pre><code>@Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; </code></pre> <p>새로운 요소의 생성이 개봉 확인을 작동으로 구성되는 ID와 I는 절전 엔티티가 재시작

나는 아래의 오류 및 추적 옵션을 실행할 때, 나는 길을, 나는 3.3.2.GA 최대 절전 모드 사용하고, javax의에 의해 ID가

*Hibernate: insert into org_myEntity (entitiyJID, entitityName, id) values (?, ?, ?) org.hibernate.util.JDBCExceptionReporter
SQL Error: 20000, SQLState: 23505 org.hibernate.util.JDBCExceptionReporter The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL120725164357680' defined on 'TABLE_NAME'. org.hibernate.event.def.AbstractFlushingEventListener
Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: could not*

재사용되는 것을 볼 수 있었다 .persistance 2.0.0 및 Derby 10.5.1 데이터베이스

내 세대에 어떤 문제가있을 수 있으며 어떻게 해결할 수 있습니까?

답변

11

AUTO를 사용한다면, Hibernate는 당신의 id를 생성하기위한 전략 중 하나를 선택할 것이다. 참조 :

따라서 Derby가 사용하는 전략을 확인하려면 생성되는 ID를 확인해야합니다. 모양은 같지만 앱을 다시 시작할 때마다 생성기가 재설정됩니다. 설정을 시도하십시오

<prop key="hibernate.hbm2ddl.auto">update</prop> 

신속하게 시퀀스 생성기를 사용하여 수정할 수 있습니다. 예 :

@Id 
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_seq_gen") 
@SequenceGenerator(name="my_seq_gen", sequenceName="ENTITY_SEQ") 
private Long id; 

여기서 ENTITY_SEQ는 데이터베이스의 시퀀스 이름 (수동으로 생성 한 이름)입니다.

+1

좀 더 까다 롭지 만 "hibernate.hbm2ddl.auto"에 대한 귀하의 의견은 종을 울립니다. 드디어 hibernate.hbm2ddl.auto가 생성 - 드롭으로 설정된 하나의 프로젝트 속성 파일과 hibernate.hbm2ddl.auto가 업데이트되도록 설정된 번들 중 하나의 SessionFactory를 갖게되었습니다. 따라서 해당 번들의 데이터가 데이터베이스에 보관되지만 반복기는 다시 시작됩니다. Obrigado pela dica = D – Thomas

관련 문제