2010-04-09 1 views
1

사전로드 된 시스템 데이터로 시스템을 부트 스트랩 할 수 있도록 모든 테이블 (예 : 1-1000)에 대한 기본 키 식별자 세트를 예약하고자합니다.부트 스트랩 데이터 사전로드를위한 기본 키 식별자 집합을 예약하는 방법

모든 JPA 엔티티 클래스에는 기본 키에 대해 다음과 같은 정의가 있습니다.

@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false) 
private Integer id; 

증가 1000에서 일어나고 시작해야 데이터베이스를 알 수있는 방법 (즉, 고객의 특정 데이터는 이후 1000부터 시작됩니다)이있다. 우리는 우리 환경에서 (h2, mysql, postgres)를 지원하며 JPA를 통해 구동 될 수있는 솔루션과 Hibernate에서 리버스 엔지니어링 DDL 도구를 선호합니다.

이 올바른 접근 방식

답변

1

대신 IDENTITYTABLE 전략을 시도 할 수있는 경우 알려주세요. 최대 절전 모드 책에서 : Hibernate의 hilo 전략과 같은 많은

, TABLE 은 지난 생성 정수 기본 키 값을 유지하는 데이터베이스 테이블에 의존하고, 각 생성기는이 테이블에 한 행에 매핑됩니다. 각 행에는 pkColumnNamevalueColumnName의 두 열이 있습니다. pkColumnValue은 각 행을 특정 생성자 인 에 할당하고 값 열은 마지막으로 검색된 기본 키를 보유합니다. 지속성 공급자 은 까지 각각 allocationSize 개의 정수를 할당합니다.

자세한 설명이있는 an example입니다. 그리고 더 복잡한 example for setting the initial value.

당신은 또한 다음과 같이 당신의 orm.xml에 정의 된 사용자 정의 시퀀스 생성기를 사용하여 시도 할 수 :

<sequence-generator name="mySequenceGenerator" 
    sequence-name="MY_SEQUENCE" 
    initial-value="123" 
    allocation-size="20"/> 

이것은 초기 값으로 MY_SEQUENCE라는 데이터베이스 시퀀스 (123)의 가로 사용할 수 있습니다 선언합니다 데이터베이스 식별자 생성 소스이며 지속성 엔진은 식별자가 필요할 때마다 20 개의 값을 가져야합니다. (최대 절전 모드 주석이 글을 쓰는 시점에서의 initialValue 설정을 무시하지만, 을 참고.)

특정 기업이 식별자 생성기를 적용하려면, 그 이름 사용

@Entity 
class name MyEntity { 
    @Id @GeneratedValue(generator = "mySequenceGenerator") 
    String id; 
} 
1

하는 경우를 그 밖의 모든 것은 실패합니다. 사용자 정의 ID 생성기를 작성하여 DAO의 create(Entity entity) 메소드에서 사용할 수 있습니다. 아이디 순서 표는이 테이블에 대한 ID를 foo 1001에서 시작하여 100 씩 증가가 (그래서 당신은 각각의 새로운 테이블 삽입에 대한 DB를 호출 할 필요가 없습니다)을 의미 수있는 일

------------------------------------------------------------- 
| sequence_name | initial_value | current_value | increment | 
------------------------------------------------------------- 
|   foo |   1001 |   2000 |  100 | 

처럼 될 수있다.

많은 문제없이 사용하고 있습니다.

관련 문제