在休眠中创建序列 ID

creating sequence Id in 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;  

问题是我想指定像

这样的属性
START WITH, INCREMENT BY, NOCACHE

最终的 ddl 脚本应该如下所示

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

但据我所知,hibernate 只支持 name、sequncename、allocationSize、initialvalue。我的疑问是,如果我们使用 allocationSize = 1 & initialValue = 1 我们还需要提到 "nocache" 吗?如果是这样,我们对 "nocache" 有任何类型的注释吗?

如果我可以将该属性作为注释包含在 pojo 中,请告诉我。

据我所知,我们没有这样的注释属性。但理想情况下,您应该使用自己的 SQL 查询创建序列,而不是使用 hibernate 生成的默认查询。当序列存在于数据库中时,Hibernate不会生成一个,你也可以禁用hibernate ddl生成。

序列仅使用 oracle、postgreSQL、DB2、H2

我知道两个案例

(1)

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idx;

Auto_increment, 序列对象 -> 策略 = GenerationType.AUTO

(2) 你的情况。

Element Detail

public abstract String name (必需)一个唯一的生成器名称 可以被一个或多个 类 引用为生成器 主键值。

public abstract String sequenceName (可选) 从中获取主键值的数据库序列对象。 默认为提供者选择的值。默认值:hibernate_sequence

public abstract int initialValue (可选) 序列对象开始生成。 Default:1

public abstract int allocationSize (可选)要增加的数量 by 当从序列中分配序列号时。 Default:50

DDL

create sequence RTDS_ADSINPUT_SEQ start with 1 increment by 1;

实体

@Entity
@SequenceGenerator(
name = "seqid-gen", 
sequenceName = "RTDS_ADSINPUT_SEQ" 
initiaValue = 1, allocationSize = 1)
public class XXX {

   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
   private long id;

    //getter, setter
}

我们可以按照下面提到的方式使用hibernate生成序列id

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int uniqueid;