2013-12-10 2 views
1

나는JPA 및 GeneratedValue

@Id 
@Column(name = "rec_id", scale = 0) 
@GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE) 
@SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE") 
public Long getRecordId() { 
    return outboundPackageRecordId; 
} 

지금이의 나의 이해는 오라클 DB를 사용하여 PK.Am을 생성하는 데 사용되는 DB 차 key.A DB 시퀀스를 생성하는 JPA 주석을 사용하는 코드가 있습니다 : DB 시퀀서가 반환 한 시퀀스 ID가 rec_id로 사용됩니다. 이 맞습니까?

DOC는 말한다 :

순서 전략 시퀀스 전략은 두 부분으로 구성 - 명명 된 순서를 정의하고 하나 하나 개 이상의 필드 또는 이상의 클래스에 명명 된 시퀀스를 사용. @SequenceGenerator 주석은 시퀀스를 정의하는 데 사용되며 이름, 초기 값 (기본값은 1) 및 할당 크기 (기본값은 50)를 허용합니다. 시퀀스는 응용 프로그램에 대해 전역이며 하나 이상의 클래스의 하나 이상의 필드에서 사용할 수 있습니다. 시퀀스 전략은 이전에 정의 된 이름 순서로 지정된 필드를 연결합니다 @GeneratedValue 주석에 사용됩니다

@Entity 
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100) // Define a sequence - might also be in another class: 
public class EntityWithSequenceId { 
    // Use the sequence that is defined above: 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") 
    @Id long id; 
} 

은 AUTO 및 IDENTITY는 달리, SEQUENCE 전략은 즉시 자동 값을 생성 새 엔티티 객체가 지속될 때 (즉, 커밋 이전). 이 값은 기본 키 값이 일 때 필요합니다. 데이터베이스 서버로의 왕복을 최소화하기 위해 ID는 그룹으로 할당 된 입니다. 각 할당의 ID 수는 allocationSize 속성에 의해 으로 지정됩니다. ID 할당 중 일부 이 사용되지 않을 수 있습니다. 따라서이 전략은 에 시퀀스 값에 틈이 없음을 보장하지 않습니다.

답변

-1

이렇게하면 P_REC_ID_SEQUENCE 시퀀스의 다음 값이 사용됩니다.

이것은 또한 사용중인 데이터베이스에 따라 다릅니다. Postgres에 시퀀스를 정의 할 수 있지만 MySQL은 정의 할 수 없습니다.

MYSQL을 사용하는 경우 Auto-Incremement을 사용할 수 있지만 시퀀스를 정의 할 필요는 없습니다. 당신이 ORACLE 데이터베이스를 사용하는 경우 현재 시퀀스 값이 그 다음 하나는 내가 말이 희망 (101) 일 것이다 (100) 인 경우

당신은 지금

CREATE SEQUENCE emp_sequence 
     INCREMENT BY 1 
     START WITH 1 

로 순서를 정의합니다.

+0

@ Makky.We는 oracle DB를 사용하고 있습니다. 또한 다음 값 u는 P_REC_ID_SEQUENCE에 의해 다시 계산 된 값을 의미합니까? – user93796

+0

예. P_REC_ID_SEQUENCE에서 반환 된 다음 값입니다. – Makky

관련 문제