在休眠中创建序列 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;
我想使用休眠工具生成序列(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;