当前位置: 首页 > 面试题库 >

@GeneratedValue(strategy =“ IDENTITY”)与@GeneratedValue(strategy =“ SEQUENCE”)

华鹭洋
2023-03-14
问题内容

我是新来的hibernate。我不了解以下两种主要的密钥生成策略:

  1. 身分识别
  2. 序列

有人可以解释这两个是如何工作的,两者之间有什么区别?


问题答案:

引用Java持久性/标识和排序:

身份 排序使用数据库中的 特殊IDENTITY列 来允许数据库在插入对象的行时自动为其分配ID。许多数据库(例如
MySQL,DB2,SQL Server,Sybase和Postgres)
都支持标识列。Oracle不支持IDENTITY列,但是可以使用序列对象和触发器来模拟它们。

用简单的英语来说:您最多ID将表中的一列标记为IDENTITY。数据库引擎将自动为您输入 下一个可用 值。

和:

序列 对象使用 特殊的数据库对象 来生成ID。仅某些数据库(例如 Oracle,DB2和Postgres)
支持序列对象。通常,SEQUENCE对象具有名称,INCREMENT和其他数据库对象设置。每次<sequence>.NEXTVAL选择时,序列都会增加INCREMENT。

序列更灵活,稍微复杂一些。您可以在数据库中的表,触发器等旁边定义一个额外的对象,称为 sequence
。序列基本上被称为计数器,您可以在查询中的任何地方使用。



 类似资料:
  • 例如,如果我希望生成的ID开始为100,XXX而不是10,XXX并增加100,我将如何进行更改? 请帮个忙。提前谢了。

  • 问题内容: 我正在尝试将对象持久化到数据库。不断获取“列ID无法接受空值错误”。我的对象看起来像这样: 我的持久功能: 问题答案: 您可以使用GenerationType.TABLE。这样,jpa将序列表用于ID分配,您可能永远不需要生成序列或自动递增值或触发可移植性的触发器。 另请注意,在java中,int类型默认使用0初始化,因此您也可以摆脱它。

  • 问题内容: 我使用在我的实体上生成ID。 我现在不知道它是如何工作的,但是在我的子表上,它会生成遵循父序列的ID值。 在父级上插入的ID值将更新序列。在子级上插入的ID值将更新序列。在下一个父项插入中,序列…使用由子项插入更新的值… 此注释不会创建两个序列,而只会创建一个。这是正确/预期的吗? 我仅使用插入了具有DAO服务的实体 ; 问题答案: 这些注释不会创建两个序列,而只会创建一个。这是正确/

  • 问题内容: 我有一个hibernate实体,其ID配置为 在第一次运行中,可以正常创建新元素。但是,如果我重新启动应用程序并取回记录,则下次我尝试保留该实体时,hibernate将尝试使用未重新启动应用程序时生成的相同ID。 我收到以下错误,并且在使用trace选项运行时,我能够看到ID被重用了 hibernate状态:将值(?,?,?)插入到org_myEntity(entitiyJID,ent

  • 策略模式是一种行为模式。 策略模式的主要目标是使客户端能够从不同的算法或过程中进行选择以完成指定的任务。 可以交换不同的算法,而不会对上述任务产生任何复杂性。 当访问外部资源时,此模式可用于提高灵活性。 如何实施战略模式? 下面显示的程序有助于实施战略模式。 import types class StrategyExample: def __init__(self, func = None)

  • digital-strategy 库是 NASA 响应总统数字战略的源头,并鼓励平民开发者用这些信息来建立应用程序及工具。