2011-11-16 3 views
4

아직 정지 절전 아이디로 0을 사용Hibernate가 0을 ID로 사용하는 것을 막는 방법?

@Id 
@GeneratedValue(generator="tab",strategy=GenerationType.TABLE) 
private int id; 

ID를 가진 엔티티에

@TableGenerator(name="tab",initialValue=2,allocationSize=50) 

를 이용하여 정의하고있다.

주석은 Jboss AS7과 함께 제공되는 Hibernate4와 함께 제공되지 않기 때문에 @GenericGenerator를 사용할 수 없습니다.

간단한 해결책이 있습니까? 아니면 사용자 정의 Generator를 작성해야합니까?

+1

주석을 덮어 쓰는 배치 설명자 코드가 없습니까? 스키마 초기화를 사용하거나 기존 데이터베이스에서 작업하고 있습니까? –

+0

데이터베이스 별 배포 설명자가 없습니다. 나는 을 사용하고 import.sql을 통해 몇몇 샘플 데이터를 사용하고있다. –

+0

그리고 이러한 데이터 중에는 테이블 생성기가있는 테이블에 대한 삽입이 없다고 확신합니까? Hibernate가 모든 테이블을 생성하고 import.sql이 실행되기 전에 빈 데이터베이스에서 코드를 호출하려고 시도 했습니까? –

답변

2

하이버 네이트는 ID가 0 인 ID를 만들고있다. 왜냐하면 당신은 프리미티브 타입을 가지고 있기 때문이다. int id 대신 Integer id을 사용해보세요. 기수는 null 값을 가질 수 없다는 것을 기억하십시오.

사용자 지정 ID 생성기를 생성하려면 DB에 SEQUENCE을 사용하여 개체가있는 ID를 생성 할 수 있습니다.

<id ....> 
     <generator class="sequence"> 
      <param name="sequence">YOUR_SEQUENCE _NAME</param> 
     </generator> 
</id> 

발전기 클래스에 대한 API는 here을 참조하십시오.

+0

고마워요. 문제는 Hibernate에게 0을 ID로 사용하지 말 것을 알리는 커스텀 생성기와 생성자 주석을 무시하는 이유가 더 많거나 적다는 것이다. –

관련 문제