问题标签 [id-generation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1003 浏览

java - Hibernate:为列表中的相同对象引用生成不同(唯一)ID

问题

当列表中有两次相同的对象引用时,是否可以在 Hibernate 中进行插入,我想同时插入它们并且 ID 必须是唯一的?

背景

我正在使用random-beans生成一个Person具有 type 列表的随机对象House。问题是 random-beans 不会每次都创建一个新的 house 对象,它有时也会使用现有的引用。在这种情况下,相同的房屋对象引用可以在人员列表中出现两次。但不管随机beans如何,我都想处理必须在Hibernate的同一个事务中提交的新对象的多个引用。

可能通过在 处分配 ID 是不可能的Session.save(Object obj),因为列表中仍然引用了相同的对象。如果对此没有简单的解决方案,我也会感谢一种在保存或提交时删除重复对象的方法。请注意,将 List 更改为 Set 并不能解决问题,因为相同的引用可以在不同的列表中。

例子

该数据库是 MySQL 数据库。

主要的

房子

0 投票
1 回答
92 浏览

php - 为 WordPress 主题中的每个标题生成 ID 或类

因此,我在 WordPress 中为我的网站提供了以下代码。例如,在它显示当前页面的标题下,我的是“宝贝”(黑色)。所以我想为每个标题有一个唯一的类或 ID(所以我可以为每个标题使用不同的颜色,而不是全部为黑色),但由于它们是由 PHP 生成的,我不知道如何实现这一点。如果它是一个纯 HTML,我可以给它一个类和样式,但现在我没有任何独特的类。

0 投票
2 回答
6326 浏览

java - 为什么saveandflush后实体中的id为null,而数据库中的id不为null?

我将最新的Spring BootSpring Data JPAHibernate一起使用。使用的数据库是Oracle 11G。几天来我一直在寻找解决方案,但没有任何效果。我努力检索数据库中新插入(成功)的实体的 id。我使用序列和触发器。例如

实体:

触发:

序列:

查询在控制器中执行。例如

findAll {"id":81,"addressLine":"aa","addressLine2":"a","city":"a","postalCode":"a"} 之后的结果

但这是 System.out.println(saved); 之后的对象。

存储库:

我怀疑会话存在问题,数据尚未提交。我对吗?如何解决?谢谢!

0 投票
1 回答
1529 浏览

spring - Spring Data CrudRepository 自定义 ID 生成器

我正在使用 spring boot(1.4)、spring data 和 jpa。并使用@Repository(CrudRepository) 我的表/实体之一,即 ID 列,我想生成自定义字符串。从一些特定的字符串加上创建数据和时间开始,并以 db 中的下一个值结束。所以在这里我不能使用@TableGenerator,我需要一些原生查询,比如“select nextvalue”

有没有更好的方法可以实现这一点。

0 投票
1 回答
909 浏览

spring-boot - 使用 JPA 的 Spring-Boot 不保留 ID

我需要在我的数据库中插入一条记录,但在某些情况下我需要传递 ID,但是当我手动插入我的 id 时,spring-boot 不会使用此 ID 保存,spring-boot 会从序列中获得一个新的

这是我的实体

这是我要保存的代码:

而是用 id 12323 保存,他从我的序列中得到了下一个

0 投票
0 回答
613 浏览

grails - 对于没有本机自动增量功能的数据库,Grails (GORM) 中的默认 ID 生成策略是什么

我正在使用带有 oracle 的 grails 2.4。现在,如果我想在数据库表中创建一行,我只需在 grails 中创建一个域对象并调用 save() 方法。不过,我目前没有将任何 id 传递给该对象。

这将创建一行并自动为数据库中的 id 列设置一个 id,因为我已经在域对象的映射器中指定了 id 列

根据Grails 文档,grails 默认使用本机(数据库内置)id 生成器。

我的问题是,如果我将数据库切换到 h2 而不是 oracle(对于不同的环境),grails 将如何管理数据库的 id 列?

目前,当我使用 Bootstrap.groovy 创建一些默认数据时,我收到一条错误消息,指出“STATE_ID”(对于 h2 数据库)中不允许出现“NULL”。它适用于甲骨文。

有没有办法告诉 grails 仅在数据库没有使用默认生成器时才使用某些特定的生成器?

0 投票
0 回答
49 浏览

sql-server - 在持久化之前针对数据库检查 @Id 列值

下面是我的主要列定义,

我有两个应用程序服务器连接到一个数据库。当第一个应用程序服务器插入大约 10 条记录时,主键值(entityId)将为 10,当第二个应用程序服务器插入大约 15 条记录时,主键值(entityId)将为 25。到目前为止很好。

现在,当第一个应用程序服务器尝试插入一些记录时,entityId 从 11 而不是 26 开始,导致Violation of PRIMARY KEY constraint。预计 entityId 应从 26 开始。

两个应用程序服务器都在单独的 JVM 中运行。

请分享您在处理这种情况时的投入。

提前致谢..

0 投票
0 回答
315 浏览

jpa - JPA 自动生成的继承实体的 id 未按照超类中序列生成器中的定义递增

我对持久继承的实体有一个奇怪的自动生成 id 行为。我有一个带有序列生成器的人员实体,它以 4 递增,并且工作正常。我有另外两个实体 Client 和 Agent,它们继承 Person 并将人员 ID 用作 pk。我有一个包含 3 个连接实体的策略实体:2 个客户端和代理。当我坚持策略[entity manager]persist(policy)它调用

对于第一个客户端,并按照假设增加 id,但是在持久化其他 2 个实体时:客户端和代理,它只调用:

并按预期增加 1 而不是 4。我无法理解这种行为。我在这里错过了什么?

我使用: JPA EclipseLinkPostgresql


客户端和代理类:

具有联合关系的策略类:

我的架构:

坚持政策后:

我在日志中收到:

但是自动生成的 id 应该是: 50, 54, 58

在插入之前我看到的数据库序列中:

当前值:46 下一个值:50

插入后:

当前值:50 下一个值:54

在下一个持久化中,我收到以下 ID:52、51、50。


解决方案:

将 allocationSize 更改为 1 是固定的,当设置此参数表示缓存时,下一个值将增加多少次,直到它将从数据库中获取下一个值,在 javaee api 文档中,此参数表示递增,但它的工作方式不同不知道为什么。

0 投票
2 回答
1511 浏览

java - 如何使用相同的自定义 id 生成器统一多个实体的 @GenericGenerator 声明?

我的项目中有许多实体使用相同的自定义IdentifierGenerator生成@Id使用SpringDataJPA/Hibernate.

一个示例实体;

但我不想@GenericGenerator为每个实体的每个 id 字段重复声明。有没有办法隐藏这个包含丑陋的硬编码完整类名的注释?

post scriptum
我以前使用包含@MappedSuperClass的,但由于一些技术原因,我不得不放弃使用这样的超类。显然,这是解决这个问题的最简单方法。BaseEntityid

0 投票
1 回答
114 浏览

id-generation - 从 16 位数字生成 ID

是否有任何可能的简单方法/方式将 16 位字母数字生成/加密为 6 到 8 位字母数字代码。16 位数字将有数百万种可能的组合,因此加密的 6-8 字母数字数字必须是唯一的。提前感谢您的建议。