2013-03-01 37 views
8

Tôi muốn tạo chuỗi bằng công cụ ngủ đông (pojo to sql). Và chắc chắn nó hoạt động tốt.tự động tạo chuỗi bằng công cụ ngủ đông

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

Mã này tạo ra bên dưới sql

create sequence RTDS_ADSINPUT_SEQ; 

Vấn đề là tôi muốn để xác định tính chất như

INCREMENT BY,NOCACHE CYCLE 

và kịch bản ddl thức nên có một số điều như dưới đây

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

Nhưng như đến nay tôi thấy hibernate chỉ hỗ trợ name, sequncename,allocation,initialvalue

Hãy tư vấn cho tôi nếu tôi có thể bao gồm các thuộc tính đó làm chú thích trong thơ.

Trả lời

7

Tôi đã tra cứu nó trong các nguồn Hibernate (4.2.7). Không thể chỉ định điều này bằng chú thích (không phải JPA hoặc Hibernate).

Tuy nhiên bạn có thể cung cấp phương ngữ của riêng bạn để đạt được điều này.

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 
    } 
} 

Có một thực thể như thế này

@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; 

    // ... 

} 

Bạn có thể đặt Dialect mới của bạn như được mô tả trong doc Hibernate (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects)

0

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này

<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>