我想使用 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;
// ...
}
您可以按照 Hibernate 文档 (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects) 中的描述设置您的新方言
关于java - 使用 hibernate 工具自动创建序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154366/