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的自动增量?
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_NAME,GEN_VALUE如果模式生成不可用,您必须自己创建此表。
您可以在此处从 hibernate 文档中找到更完整的信息:http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch05.html#mapping-declaration-id-generator