我在我的 spring MVC 项目中使用 hibernate 和 MySQL 数据库。我已经使用 @GeneratedValue
注释在我的 id 字段上设置自动增量。所以我所有的实体都有这段代码,一切都按预期工作:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
这时候想换成Oracle数据库。现在,我有两个问题:
1. 在oracle中设置自增字段的最佳方案是什么?我使用了这段代码,但没有用:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence")
@SequenceGenerator(name="id_Sequence", allocationSize=1)
2(更重要的问题)。有什么方法可以使用独特的注释来设置对MySQL和Oracle都适用的自动增量?
最佳答案
1:
如果您定义自己的生成器,则必须使用 @GeneratedValue
中的生成器属性。如果您创建了自己的序列,则必须使用 sequenceName
定义名称,否则 hibernate 会为您创建一个。
@SequenceGenerator(name="some_gen", sequenceName="Emp_Seq")
@GeneratedValue(generator="some_gen")
2:
最灵活(和可移植)的方法是使用 TABLE
策略
@GeneratedValue(strategy=GenerationType.TABLE)
或更明确
@GeneratedValue(generator="some_gen")
@TableGenerator(name="some_gen",
table="ID_GEN",
pkColumnName="GEN_NAME",
valueColumnName="GEN_VAL")
如果模式生成不可用,这将生成(如果启用模式生成)一个表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
关于java - hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31554236/