目前,我们使用 MySQL 作为数据库,我们使用
@Generated Value(strategy = GenerationType.IDENTITY)
它在某些情况下运行良好,我们需要将数据库迁移到 Oracle,但当时它无法正常运行。如果有人知道这背后的实际区别是什么以及它是如何工作的?
原文由 sethu palaniyappan 发布,翻译遵循 CC BY-SA 4.0 许可协议
目前,我们使用 MySQL 作为数据库,我们使用
@Generated Value(strategy = GenerationType.IDENTITY)
它在某些情况下运行良好,我们需要将数据库迁移到 Oracle,但当时它无法正常运行。如果有人知道这背后的实际区别是什么以及它是如何工作的?
原文由 sethu palaniyappan 发布,翻译遵循 CC BY-SA 4.0 许可协议
引用 Java 持久性/身份和排序:
身份 排序使用数据库中 特殊的 IDENTITY 列,以允许数据库在插入行时自动为对象分配一个 id。许多数据库都支持标识列,例如 MySQL、DB2、SQL Server、Sybase 和 Postgres 。 Oracle 不支持 IDENTITY 列,但可以通过使用序列对象和触发器来模拟它们。
所以我更喜欢使用 SEQUENCE
序列对象使用特殊的数据库对象来生成 id。序列对象仅在某些数据库中受支持,例如 Oracle、DB2 和 Postgres。通常,一个 SEQUENCE 对象有一个名称、一个 INCREMENT 和其他数据库对象设置。每次选择 .NEXTVAL 时,序列都会增加 INCREMENT。
例子 :
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}
原文由 Ahmad Al-Kurdi 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
它如何与 Oracle 一起“正常工作”(您没有像您所说的那样定义基本信息)?我没有看到
AUTO
与您的问题的相关性 - 它只是让实现选择它想要使用的内容。“
IDENTITY
”(根据 JPA javadocs 和规范 - 你应该指的是什么)意味着 autoincrement 。在 Oracle 中没有这样的概念,但在 MySQL、SQLServer 和其他几个中有。我希望任何像样的 JPA 实现在尝试这样的事情时都能标记错误。Oracle 将允许使用“
SEQUENCE
”或“TABLE
”策略