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

标签 java mysql oracle hibernate auto-increment

我在我的 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_NAMEGEN_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/

相关文章:

linux - 在linux(CENTOS)上为多个ORACLE HOME配置.bash_profile

java - 字符编码问题-GB2312

java - 为 DTO 构造函数创建 JUnit 测试

sql - Oracle 语法错误

mysql - 如何仅对付款总额为正的记录进行分组?

php - 将简单的 PHP 博客系统集成到现有网站中

java - Spring SimpleJdbcTemplate : java. lang.OutOfMemoryError:超出GC开销限制

java - TrueZip 创建虚拟目录而不是存档

Java 8 List<String[]> 到 List<List<Integer>>

php - 使用 PHP 5 将 CSV 文件导入 MySQL 表