提问人:Satheesh Cheveri 提问时间:3/1/2013 最后编辑:AnthonSatheesh Cheveri 更新时间:4/12/2018 访问量:11452
使用休眠工具自动创建序列
auto creation of sequence using hibernate tool
问:
我想使用休眠工具(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 ;
但到目前为止,我看到休眠只支持name, sequncename,allocation,initialvalue
请告诉我是否可以将这些属性作为注释包含在 pojo 中。
答:
7赞
tine2k
1/31/2014
#1
我在 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赞
Ajay Sharma
8/6/2015
#2
我想你正在寻找这样的东西
<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>
下一个:计算对序列进行排序的最小交换次数
评论