2013-03-01 17 views
8

Chciałem wygenerować sekwencję za pomocą narzędzia hibernacji (pojo do sql). I zdecydowanie działa dobrze.Automatyczne tworzenie sekwencji za pomocą narzędzia hibernacji

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen") 
@SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ") 
@Column(name="id") 
public Long getId() { 
    return id; 
} 

Ten kod generuje poniżej sql

create sequence RTDS_ADSINPUT_SEQ; 

Problem polega chciałem określić właściwości jak

INCREMENT BY,NOCACHE CYCLE 

i ostatecznego scenariusza ddl powinny być niektóre rzeczy jak poniżej

CREATE SEQUENCE RTDS_ADSINPUT_SEQ MINVALUE 1 MAXVALUE 
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE ORDER CYCLE ; 

Ale jak daleko widziałem tylko wsparcie hibernacji name, sequncename,allocation,initialvalue

Proszę mi doradzić, czy mogę dołączyć te właściwości jako adnotację do pojo.

Odpowiedz

7

Sprawdziłem to w źródłach Hibernacji (4.2.7). Nie można tego określić za pomocą adnotacji (ani JPA, ani hibernacji).

Możesz jednak utworzyć własny dialekt, aby to osiągnąć.

public class MyOwnOracleDialect extends Oracle10gDialect { 

    @Override 
    protected String getCreateSequenceString(final String sequenceName, final int initialValue, final int incrementSize) 
     throws MappingException { 
     String createSequenceString = super.getCreateSequenceString(sequenceName, initialValue, incrementSize); 
     return createSequenceString + " NOCACHE ORDER CYCLE"; // modify this string as you like 
    } 
} 

Masz podmiot jak ten

@Entity 
public class MyEntity { 

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen") 
    @SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ", allocationSize = 1, initialValue = 0) 
    @Column(name="id") 
    private Long id; 

    // ... 

} 

Można ustawić swój nowego dialektu, jak opisano w dokumencie hibernacji (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects)

0

myślę szukasz coś takiego

<id name="pk_field" column="column_name"> 
     <generator class="sequence"> 
      <param name="sequence">sequence_name</param> 
      <param name="parameters">START WITH 5 INCREMENT BY 10</param> 
     </generator> 
    </id> 
Powiązane problemy