Java 使用hibernate工具自动创建序列

Java 使用hibernate工具自动创建序列,java,hibernate,sequence,Java,Hibernate,Sequence,我想使用hibernate工具(pojo到sql)生成序列。而且肯定很好用 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen") @SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ" ) @Column(name="id") public Long getId() { return id; }

我想使用hibernate工具(pojo到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 ;
但据我所知,hibernate只支持
name、sequncename、allocation、initialvalue


请告诉我是否可以将这些属性作为注释包含在pojo中。

我在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;

    // ...

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

您可以按照Hibernate文档()中的描述设置新方言。

我想您正在寻找类似的东西

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

序列名称
从5开始,递增10