2013-03-01 25 views
8

我想用hibernate工具(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 ; 
一些事情

但是as很远,我看到休眠只支持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 
    } 
} 

有这样

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

    // ... 

} 

一个实体可以作为在Hibernate文档(http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects

0

我认为你正在寻找这样的事情

描述设置你的新方言
<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>