使用hibernate工具自动创建序列

Sat*_*eri 9 java hibernate sequence

我想用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;
}
Run Code Online (Sandbox Code Playgroud)

此代码生成在sql下面

create sequence RTDS_ADSINPUT_SEQ;
Run Code Online (Sandbox Code Playgroud)

问题是我想指定像这样的属性

INCREMENT BY,NOCACHE CYCLE
Run Code Online (Sandbox Code Playgroud)

最后的ddl脚本应该是下面的东西

CREATE SEQUENCE  RTDS_ADSINPUT_SEQ  MINVALUE 1 MAXVALUE
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  ORDER  CYCLE ;
Run Code Online (Sandbox Code Playgroud)

但到目前为止我看到hibernate只支持 name, sequncename,allocation,initialvalue

如果我可以在pojo中包含这些属性作为注释,请建议我.

tin*_*e2k 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
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个像这样的实体

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

    // ...

}
Run Code Online (Sandbox Code Playgroud)

您可以按照Hibernate doc(http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects)中的说明设置新的Dialect.