生成类型.AUTO 与生成类型.处于休眠状态
2022-09-01 02:07:35
目前,我们使用MySQL作为数据库,我们使用
@Generated Value(strategy = GenerationType.IDENTITY)
在某些情况下,它可以完美地工作,我们需要将数据库迁移到Oracle,当时它无法正常工作。如果有人知道这背后存在的实际差异是什么以及它是如何工作的?
目前,我们使用MySQL作为数据库,我们使用
@Generated Value(strategy = GenerationType.IDENTITY)
在某些情况下,它可以完美地工作,我们需要将数据库迁移到Oracle,当时它无法正常工作。如果有人知道这背后存在的实际差异是什么以及它是如何工作的?
它如何与Oracle一起“正常工作”(你没有定义基本信息,就像你的意思一样)?我没有看到与您的问题的相关性 - 这只是让实现选择它想要使用的内容。AUTO
"IDENTITY
“(根据 JPA javadocs 和 spec - 你应该指的是什么)表示自动增量。Oracle中没有这样的概念,但在MySQL,SQLServer和其他一些组织中却有。我希望任何像样的JPA实现在尝试这样的事情时都能标记错误。
但是,Oracle将允许使用“”或“”策略SEQUENCE
TABLE
引用 Java 持久性/身份和排序:
标识排序使用数据库中的特殊标识列,以允许数据库在插入对象行时自动为对象分配 ID。许多数据库都支持标识列,例如 MySQL、DB2、SQL Server、Sybase 和 Postgres。Oracle 不支持 IDENTITY 列,但可以通过使用序列对象和触发器来模拟这些列。
所以我更喜欢使用SEQUENCE代替
序列对象使用特殊的数据库对象来生成 id。序列对象仅在某些数据库中受支持,例如 Oracle、DB2 和 Postgres。通常,SEQUENCE 对象具有名称、增量和其他数据库对象设置。每次 .选择 NEXTVAL,序列按增量递增。
例:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}