hibernate - 如何在mysql和oracle数据库中设置自动增量?

ham*_*med 6 java mysql oracle hibernate auto-increment

我在我的spring MVC项目中使用hibernate和MySQL数据库.我已经使用@GeneratedValue注释在我的id字段上设置auto-incremenet.所以我的所有实体都有这段代码,一切都按预期工作:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}
Run Code Online (Sandbox Code Playgroud)

这时,我想切换到Oracle数据库.现在,我有两个问题:

1.在oracle中设置自动增量字段的最佳解决方案是什么?我使用了这段代码但是没有用:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence")
@SequenceGenerator(name="id_Sequence", allocationSize=1)
Run Code Online (Sandbox Code Playgroud)

2(更重要的问题).有没有办法使用唯一的注释来设置适用于MySQL和Oracle的自动增量

Mat*_*ert 0

1: 如果您定义自己的生成器,则必须使用@GeneratedValue. 如果您创建了自己的序列,则必须定义名称,sequenceName否则 hibernate 将为您创建一个序列。

@SequenceGenerator(name="some_gen", sequenceName="Emp_Seq")
@GeneratedValue(generator="some_gen")
Run Code Online (Sandbox Code Playgroud)

2: 最灵活(且可移植)的方式是使用TABLE策略

@GeneratedValue(strategy=GenerationType.TABLE)
Run Code Online (Sandbox Code Playgroud)

或更明确的

@GeneratedValue(generator="some_gen")
@TableGenerator(name="some_gen",
    table="ID_GEN",
    pkColumnName="GEN_NAME",
    valueColumnName="GEN_VAL")
Run Code Online (Sandbox Code Playgroud)

这将生成(如果启用了模式生成)一个包含ID_GEN, 列的表GEN_NAMEGEN_VALUE如果模式生成不可用,您必须自己创建此表。

您可以在此处从 hibernate 文档中找到更完整的信息:http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch05.html#mapping-declaration-id-generator