hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?
Posted
技术标签:
【中文标题】hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?【英文标题】:hibernate - how to set auto increment in both mysql and oracle databases? 【发布时间】:2015-10-11 19:16:51 【问题描述】:我在我的 Spring MVC 项目中使用休眠和 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】: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
【讨论】:
感谢您的回答。第一个建议不需要使用strategy=GenerationType.SEQUENCE
?
我不认为是因为您将生成器定义为@SequenceGenerator
。
我把@SequenceGenerator(name="some_gen", sequenceName="Emp_Seq") @GeneratedValue(generator="some_gen")
放在我的身份证上面,但没有用。 @GeneratedValue(strategy=GenerationType.TABLE)
也不起作用。
hibernate 是否能够在您的数据库上创建您的序列(或表),是否启用了模式生成。尝试自己创建序列并用sequenceName
命名。
你是什么意思Hibernate 能够创建你的序列?我需要做什么才能使休眠能够创建序列?你能进一步解释一下吗?以上是关于hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?的主要内容,如果未能解决你的问题,请参考以下文章
GWT - Hibernate:如何将 MySQL 的结果显示到 GWT 客户端