问题标签 [hilo]

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 投票
1 回答
1531 浏览

mongodb - DDD 和 MongoDB:让 Mongo 创建 ObjectID 可以吗?

根据 DDD(蓝皮书,Evans),工厂有责任创建处于有效状态的聚合根。这是否意味着它应该能够创建技术 id(mongoDB 世界中的 objectId)以及域 id?

一方面,这似乎是一个技术细节,让 Mongo 处理 ID 的创建似乎没问题。

另一方面,启用按 id 查询(通过getById在 DDD 存储库中)将技术 id 暴露给域,这反过来又会使工厂负责创建它。

也许我无法理解技术 ID 与 DomainId 的不同用例/重叠等,或者我可能过于热心,但无论如何我都会很感激你的意见。

简而言之:在 DDD 中:工厂是否应该能够创建技术 ID 以及域 ID?

可能的实现:Hi/Lo(如何在 MongoDB Norm 中设置 hilo 序列起始值?

编辑:虽然 hi/lo 方式将工厂暴露给持久层,但只有存储库应该知道。嗯

谢谢

0 投票
1 回答
937 浏览

nhibernate - 将 Identity 列生成器转换为 hilo:“next_hi”应该初始化为什么?

我正在将使用身份生成器的类转换为使用 hilo 的类。我还使用一个表,每个实体都有不同的行:

旧表:

新表:

为了保持数据完整性,我只使用现有的 PatientRecord.Id 作为新的 PatientRecord.Id:

并创建一个EntityId条目:

??一个 hi 值在哪里。我应该在这里使用什么值?默认情况下,初始化列将是 1。我只是使用它,还是应该使用类似的东西select MAX(Id) from PatientRecord

0 投票
6 回答
150351 浏览

java - 休眠、@SequenceGenerator 和 allocationSize

我们都知道 Hibernate 在使用时的默认行为@SequenceGenerator——它将真实数据库序列增加,将此值乘以 50(默认allocationSize值)——然后将此值用作实体 ID。

这是不正确的行为,并且与说明的规范冲突:

allocationSize - (可选)从序列中分配序列号时增加的数量。

需要明确的是:我不关心生成的 ID 之间的差距。

我关心与底层数据库序列不一致的 ID。例如:任何其他应用程序(例如使用普通 JDBC)可能希望在从序列获得的 ID 下插入新行 - 但所有这些值可能已经被 Hibernate 使用!疯狂。

有人知道这个问题的任何解决方案(没有设置allocationSize=1并因此降低性能)吗?

编辑:
说清楚。如果最后插入的记录 ID = 1,则 HB51, 52, 53...同时使用其新实体的值:数据库中的序列值将设置为2。当其他应用程序使用该序列时,这很容易导致错误。

另一方面:规范说(在我的理解中)数据库序列应该设置为51,同时 HB 应该使用范围内的值 2, 3 ... 50


更新:
正如 Steve Ebersole 在下面提到的:我描述的行为(对许多人来说也是最直观的)可以通过设置来启用hibernate.id.new_generator_mappings=true

谢谢大家。

更新 2:
对于未来的读者,您可以在下面找到一个工作示例。

持久性.xml

0 投票
1 回答
275 浏览

nhibernate - 使用 HNibernate HiLo 生成器以编程方式获取唯一整数

我需要生成一个唯一的整数,我用它来识别外部系统的订单。我在应用程序中使用 NHibernate HiLo 生成器,所以我可以通过编程方式访问生成器,让它返回一个唯一的整数吗?我不需要将其存储在任何数据库键中。我只想使用生成唯一整数的 NH 功能。

我将在 HiLo 表中添加一列,该列仅用于这个唯一的数字序列,而不用于任何真正的数据库键。例如,假设我在 hibernate_unique_key 表中添加了一列“Foo”。

然后我可以做点什么吗:

我只是在哪里传递列的名称?

0 投票
0 回答
269 浏览

hibernate - 在 MultipleHiLoPerTableGenerator 中为 Hibernate 实现多租户

我正在尝试创建一个具有共享模式的多租户应用程序。我们已经确定了一个鉴别器字段,这将有助于过滤掉客户的数据库。

我在为某些实体生成主键的 TableGenerator 策略中遇到问题。

根据逻辑,我们将有 2 列用于 seq_name 和另一个 (seq_count) 用于跟踪计数。

但是由于它的多租户应用程序,我需要为每个客户将它们分开。因此,多个客户将拥有分别属于他们的 seq_name 和 seq_count 列。

我在想我可能需要为 TableGenerator 编写一些自定义逻辑,其中包含一个用于鉴别器列的属性,但在此之前我需要一些建议,即他们有什么其他方法可以做到这一点?

0 投票
1 回答
485 浏览

c++ - 在 Visual C 2010 中使用 Hilo 示例应用程序时出错

我正在使用 Visual Studio 2010 Ultimate,当我编译第 2 章中的示例项目时得到以下信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ff795784.aspx

错误是这样的:“uicc.exe”不是内部或外部命令、可运行程序或批处理文件。C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: "cmd.exe" exited with code 9009. 3> 3>Build FAILED.

我在我的电脑中搜索了文件“uicc.exe”。它显然不存在。我检查了我的 SDK 的版本,它似乎是 v7.0A。

所以……我该怎么办?

另外......如果我的应用程序需要这个文件“uicc.exe”而我的计算机没有它......这是否意味着潜在的目标计算机也没有这个文件?

我希望我的应用程序可以在任何目标 Windows 7 或更高版本的计算机上运行,​​而无需用户事先安装东西。

编辑:好的,事实证明我需要不同版本的 SDK。

我的新问题是:如何在不卸载或影响 Visual Studio 的情况下卸载我拥有的 Windows 7 SDK?我尝试添加/删除程序,但奇怪的是没有列出适用于 Windows 的 SDK(只是很多其他的东西,包括 Silverlight SDK,但没有 Windows SDK)。

那么,如何卸载它以便安装新版本?

0 投票
1 回答
358 浏览

asp.net - NHibernate 多对多使用 hilo 生成器插入空 id

我有 3 个表:用户、部门和用户部门。用户可以关联多个部门,部门可以关联多个用户。我在双方都使用多对多流畅映射,如下所示:

对于部门

对于用户

所有表都使用 HiLo Id 生成器和几乎类似的映射,如下所示:

当我尝试将一些用户添加到部门时,nhiberante 失败并出现错误:

无法执行批处理命令。[SQL: SQL 不可用]。内部异常:无法将值 NULL 插入“Id”列、表“test.dbo.UserDepartment”;列不允许空值。INSERT 失败。\r\n语句已终止。

我有相同的 HiLo 生成器与其他表一起使用,所以我很确定它不会导致此故障。

有人可以阐明这个问题吗?我记得过去在插入 null Id 时遇到了问题,它是通过在集合上使用逆映射解决的,但我不能在两边都使用逆,所以我需要另一种解决方案。

0 投票
0 回答
636 浏览

hibernate - Hibernate HiLo 算法如何保证集群应用的 ID 唯一性?

这篇文章很好地解释了 Hibernate HiLo 算法 -什么是 Hi/Lo 算法?

但我不清楚它如何保证集群应用程序的 ID 唯一性。

例如,如果 Hi 数是 35,并且如果两个客户端尝试同时增加 Hi 数,那么每个客户端将获得的 Hi 数是多少?

0 投票
1 回答
2297 浏览

oracle - 休眠序列生成器不一致

我有一张带有促销 id 注释的表格

但是即使将 allocationSize 指定为 1,hibernate 也会不一致地增加数字。以下是数据库中promotionid 的最新降序值

我在某处读到 Hibernate 可能会使用 hilo seq_hilo 算法和org.hibernate.id.SequenceHiLoGenerator生成器,即使@SequenceGenerator已定义。另请阅读以下链接,我们可以使用它@GenericGenerator来解决链接中的此问题

有人可以在这种情况下提供详细信息吗?@GenericGenerator语法看起来并不简单。应@SequenceGenerator否使用。有时@SequenceGenerator可以完美运行并生成正确的主键。

PS。我正在使用 Hibernate 3.5 和 Oracle 11g DB

编辑

序列码 -

编辑 2

更多分析表明,“总是”插入至少一个可被 20 整除的值。由于 Oracle 的序列默认缓存为 20,因此在正常的 hibernate 增量和缓存值之间看起来有些冲突。还观察到,当插入之间有时间间隔时,它会转到下一个可被 20 整除的值,否则会适当地增加到 1

0 投票
1 回答
2247 浏览

java - 禁用休眠 HiLo 序列生成

我正在使用 Hibernate 4.2.x,我想禁用 HiLo 序列生成 - 每次都去数据库(oracle)。我将此行添加到persistance.xml:

我的实体看起来像这样:

出于某种原因,我仍然得到 HiLo 行为 - 创建的 id 彼此远离。

查看了一些问题(例如此处此处),但没有发现任何帮助。更何况,我找不到在哪里配置要使用的优化器