2011-08-09 3 views
3

실제 인서트 전에 별도의 호출로 select seq.nextval을 수행하지 않도록 Hibernate를 설정할 수 있습니까?구성 id 시퀀스 hibernate generator

org.hibernate.jdbc.AbstractBatcher about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 
org.hibernate.SQL select SEQUENCE_1.nextval from dual 
org.hibernate.id.SequenceGenerator auditor50 - Sequence identifier generated: 122797 
org.hibernate.jdbc.AbstractBatcher auditor50 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 

<class..> 
    <id column="ID" name="id" type="long"> 
     <generator class="sequence"> 
      <param name="sequence">SEQUENCE_1</param> 
     </generator> 
    </id>  
</class> 
+0

그러면 어떻게 값을 삽입 할 수 있습니까? –

+0

테이블에 삽입 (ID) VALUES (SEQUENCE.NEXTVAL); – Rodriguez

+0

이것이 현재의 행동을 멈추게 할 지 모르겠다.하지만 데이터베이스의 기본값이'SEQUENCE.NEXTVAL'이면 어떨까? – Jeremy

답변

1

나는 이것이 가능하지 않다고 생각합니다. 그러나 나는 그것이 어떤 차이를 만들지 모릅니다. 성능상의 이유로이 작업을 수행하려는 경우 :

  1. 두 방법의 중요한 차이점을 측정 했습니까?
  2. Hibernate의 시퀀스 ID 생성기는 실제로 hilo 시퀀스 ID 생성기이며, N 삽입마다 다음 값만 가져옵니다 (N 기본값은 50입니다., IIRC). 생각보다 빠르게 확실히 빠릅니다. ?
+0

1. 나는 그것을 실제로 측정하지는 못했지만 트랜잭션 당 200 개 이상의 행을 삽입했습니다. – Rodriguez

+0

2. 모든 삽입이 50 개가 아닌 모든 삽입을 수행합니다. – Rodriguez

+0

2. 실수. 주석을 통해 구성 될 때 시퀀스 생성기는 실제로 seqhilo 생성기입니다. XML에서는 class = "sequence"보다는 class = "seqhilo"를 사용해야합니다. –

관련 문제