2013-03-01 9 views
8

ハイバーネイトツール(pojo to sql)を使ってシーケンスを生成したかったのです。そして間違いなくそれは正常に動作します。自動でハイバーネイトツールを使ってシーケンスを作成する

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

このコードは、SQL

create sequence RTDS_ADSINPUT_SEQ; 

の下に生成問題は、私は

INCREMENT BY,NOCACHE CYCLE 

などのプロパティを指定したかったし、最終的DDLスクリプトが

CREATE SEQUENCE RTDS_ADSINPUT_SEQ MINVALUE 1 MAXVALUE 
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE ORDER CYCLE ; 
以下のようないくつかのものでなければなりません

ただし、私は冬眠のみをサポートしていました。name, sequncename,allocation,initialvalue

pojoに注釈としてこれらのプロパティを含めることができれば助言してください。

答えて

7

私はHibernateソース(4.2.7)でそれを調べました。注釈(JPAとHibernateの両方)でこれを指定することはできません。

しかし、これを実現する独自の方言を提供することはできます。

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

は、Hibernateドキュメント( http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects

0

私はあなたがこの

ような何かを探していると思うで説明したようにあなたがあなたの新しい方言を設定することができ、この

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

    // ... 

} 

のような実体を持っています

<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> 
関連する問題