- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的数据库中所有生成的主键都是负整数。
我定义了一个 TableGenerator:
<table-generator name="MY_SEQ" table="MY_SEQUENCE_TABLE"
initial-value="-1000000" allocation-size="1" />
我假设这会从 -1000000 开始生成第一个 key 并将每个 ID 递增 1。因此下一个 ID 将是 -999999。
当我创建并保留一个新实体时,出现以下错误:
java.sql.SQLIntegrityConstraintViolationException:该语句被中止,因为它会导致唯一或主键约束中的重复键值...
当我检查 MY_SEQUENCE_TABLE 时,SEQUENCE_NEXT_HIGH_VALUE 中的值为 2。我尝试在 ORM.xml 中定义表生成器并作为注释,但两种方式的行为都是相同的。
是否可以在 Hibernate 中对 PK 使用负值?
谢谢
更新
我这样做是因为我要将数据从一个数据库移动到另一个数据库。然后我将数据移回。在此期间,可以在其他数据库 (Derby) 中创建新实体。当我将实体移回原处时,我需要一种方法来判断它们是否是在该数据库上创建的而不更改表架构。我想我会检查 id 是否有负值,并且我知道当我将数据移回时必须将它们创建为新实体。
有谁知道 Hibernate 类生成的是什么来处理 TableGenerator 并为序列生成表代码?
更新 2
经过一些测试,Hibernate 在使用表生成器时似乎忽略了初始值和分配大小。
我将此属性添加到 persistence.xml
<property name="hibernate.id.new_generator_mappings" value="true"/>
我切换到序列生成器并正确使用了初始值,但分配大小未保存为负数。根据 Derby 规范,负序是有效的。
来自 10.6 引用:
If specified, the INCREMENT value is a non-zero number which fits in a DataType value. If not specified, the INCREMENT defaults to 1. INCREMENT is the step by which the sequence generator advances. If INCREMENT is positive, the sequence numbers get larger over time. If INCREMENT is negative, the sequence numbers get smaller.
去尝试更多的东西......
最佳答案
我看了一下JPA specification并且似乎与初始值的约束没有任何关系,因此这可能取决于实现。意思是:如果您希望符合标准,则不应使用负初始值。
您是否尝试过设置 allocation-size ="-1"
?我现在不能尝试这个,但我很好奇 Hibernate 的行为如何,因为数据库可以有负序号。
关于java - JPA/Hibernate/Derby TableGenerator 使用负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993683/
我已经成功地将 @TableGenerator 与 EclipseLink 结合使用: @Id @TableGenerator(name = "ID_GEN", table = "se
我将尝试使用表生成器生成主键。但是当我在我的表中插入 6 条记录时,primaryKey 表只显示一个值。这是下面的代码 我的实体类 package com.generatorvaluetest.do
你能告诉我什么时候使用它吗?为什么我要创建一个新表只是为了保留主键,而现在大多数 DBMS 都支持自增并且你可以轻松调整它? 最佳答案 TableGenerator 的主要优点是可移植性,这是保证适用
我有一个表,该表具有使用表生成器生成的主键: @TableGenerator(名称 =“resourceIdGenerator”,表 =“SEQUENCE”,pkColumnName =“NAME”,
我有下面的实体,它使用 TABLE 策略来生成 id,并且工作得很好。 @Entity @Table(name = "Test_Table") public class SomeEntity impl
我有一个带有@Id 和@TableGenerator 的“狗”实体 ... @TableGenerator(table = "seq", name = "dog_gen", pkColumnName
将依赖项从 Spring 4.1.6.RELEASE 更新到 5.1.4.RELEASE 并将 Hibernate 4.3.9.Final 更新到 5.4.1.Final 后,我的一些测试用例开始失败
@TableGenerator 技术生成主键有什么好处?为什么我们使用这种技术以及如何使用用于存储生成器的序列名称和值的第三个表来获取数据? 最佳答案 来自链接。 http://en.wikibook
我在我的项目中使用TableGenerator,下面是相同的代码片段。 @GeneratedValue(strategy = GenerationType.TABLE, generator =
在尝试在表中保存新行时,我收到重复的 id 错误并且无法保留数据。它位于我们的舞台环境中,因此我目前无法访问日志,尽管我正在尝试暂时获取它以解决此问题。到目前为止我只有基本的错误消息: Duplica
我正在尝试使用 hibernate JPA 到 Tomcat 中开发后端应用程序。从现在开始,它在使用 JPA 功能的测试中运行良好,并且没有 JPA 服务的第一个版本现在正在运行(文件上传、下载等)
我有以下实体: @Entity @Table(name = "sales", schema = "cust_tables") @Multitenant(MultitenantType.TABLE_PE
我希望我的数据库中所有生成的主键都是负整数。 我定义了一个 TableGenerator: 我假设这会从 -1000000 开始生成第一个 key 并将每个 ID 递增 1。因此下一个 ID 将是
我有一个 JPA 实体,其 TableGenerator 的 AllocationSize=25。如果我手动更新 TableGenerator 表并为其下一个 ID 起始范围指定一个新值,则在当前范围
我有一个具有以下主键生成策略的实体类 @Id @Column(name = "id", nullable = false) @TableGenerator(name = "USERGENERATOR"
这是 JPA 实体架构的摘录 @Entity @Table(name="customer") public class Customer implements Serializ
我有一个基于 Spring 的应用程序,它使用 JPA 2.1 作为持久层。我使用 @TableGenerator 和 @GenerateValue 注释来处理主键 ID 生成。 这些是注释: @Ta
我需要连接到供应商数据库并插入客户数据。用于生成新客户 ID 的序列表存储最后使用的 ID(不是下一个可用的)。我在 jpa 或 hibernate 文档中找不到任何指示告诉 hibernate 将
我在 Spring Boot 1.4.0.RELEASE 的应用程序中使用 hibernate 。 索引的实体看起来类似于: @Entity(name = "SearchableTariffItem"
我们从 Hibernate 4 迁移到 5,一个主要问题是新的生成器,它生成表行的 ID。我们的旧生成器都是基于表的,比如 @TableGenerator(name = TABLE_NAME + "_
我是一名优秀的程序员,十分优秀!