问题标签 [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.
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 方式将工厂暴露给持久层,但只有存储库应该知道。嗯
谢谢
nhibernate - 将 Identity 列生成器转换为 hilo:“next_hi”应该初始化为什么?
我正在将使用身份生成器的类转换为使用 hilo 的类。我还使用一个表,每个实体都有不同的行:
旧表:
新表:
为了保持数据完整性,我只使用现有的 PatientRecord.Id 作为新的 PatientRecord.Id:
并创建一个EntityId
条目:
下??
一个 hi 值在哪里。我应该在这里使用什么值?默认情况下,初始化列将是 1。我只是使用它,还是应该使用类似的东西select MAX(Id) from PatientRecord
?
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
nhibernate - 使用 HNibernate HiLo 生成器以编程方式获取唯一整数
我需要生成一个唯一的整数,我用它来识别外部系统的订单。我在应用程序中使用 NHibernate HiLo 生成器,所以我可以通过编程方式访问生成器,让它返回一个唯一的整数吗?我不需要将其存储在任何数据库键中。我只想使用生成唯一整数的 NH 功能。
我将在 HiLo 表中添加一列,该列仅用于这个唯一的数字序列,而不用于任何真正的数据库键。例如,假设我在 hibernate_unique_key 表中添加了一列“Foo”。
然后我可以做点什么吗:
我只是在哪里传递列的名称?
hibernate - 在 MultipleHiLoPerTableGenerator 中为 Hibernate 实现多租户
我正在尝试创建一个具有共享模式的多租户应用程序。我们已经确定了一个鉴别器字段,这将有助于过滤掉客户的数据库。
我在为某些实体生成主键的 TableGenerator 策略中遇到问题。
根据逻辑,我们将有 2 列用于 seq_name 和另一个 (seq_count) 用于跟踪计数。
但是由于它的多租户应用程序,我需要为每个客户将它们分开。因此,多个客户将拥有分别属于他们的 seq_name 和 seq_count 列。
我在想我可能需要为 TableGenerator 编写一些自定义逻辑,其中包含一个用于鉴别器列的属性,但在此之前我需要一些建议,即他们有什么其他方法可以做到这一点?
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)。
那么,如何卸载它以便安装新版本?
asp.net - NHibernate 多对多使用 hilo 生成器插入空 id
我有 3 个表:用户、部门和用户部门。用户可以关联多个部门,部门可以关联多个用户。我在双方都使用多对多流畅映射,如下所示:
对于部门
对于用户
所有表都使用 HiLo Id 生成器和几乎类似的映射,如下所示:
当我尝试将一些用户添加到部门时,nhiberante 失败并出现错误:
无法执行批处理命令。[SQL: SQL 不可用]。内部异常:无法将值 NULL 插入“Id”列、表“test.dbo.UserDepartment”;列不允许空值。INSERT 失败。\r\n语句已终止。
我有相同的 HiLo 生成器与其他表一起使用,所以我很确定它不会导致此故障。
有人可以阐明这个问题吗?我记得过去在插入 null Id 时遇到了问题,它是通过在集合上使用逆映射解决的,但我不能在两边都使用逆,所以我需要另一种解决方案。
hibernate - Hibernate HiLo 算法如何保证集群应用的 ID 唯一性?
这篇文章很好地解释了 Hibernate HiLo 算法 -什么是 Hi/Lo 算法?
但我不清楚它如何保证集群应用程序的 ID 唯一性。
例如,如果 Hi 数是 35,并且如果两个客户端尝试同时增加 Hi 数,那么每个客户端将获得的 Hi 数是多少?
oracle - 休眠序列生成器不一致
我有一张带有促销 id 注释的表格
但是即使将 allocationSize 指定为 1,hibernate 也会不一致地增加数字。以下是数据库中promotionid 的最新降序值
我在某处读到 Hibernate 可能会使用 hilo seq_hilo 算法和org.hibernate.id.SequenceHiLoGenerator
生成器,即使@SequenceGenerator
已定义。另请阅读以下链接,我们可以使用它@GenericGenerator
来解决链接中的此问题
- http://lists.jboss.org/pipermail/hibernate-issues/2009-March/014663.html
- https://hibernate.atlassian.net/browse/ANN-354
有人可以在这种情况下提供详细信息吗?@GenericGenerator
语法看起来并不简单。应@SequenceGenerator
否使用。有时@SequenceGenerator
可以完美运行并生成正确的主键。
PS。我正在使用 Hibernate 3.5 和 Oracle 11g DB
编辑
序列码 -
编辑 2
更多分析表明,“总是”插入至少一个可被 20 整除的值。由于 Oracle 的序列默认缓存为 20,因此在正常的 hibernate 增量和缓存值之间看起来有些冲突。还观察到,当插入之间有时间间隔时,它会转到下一个可被 20 整除的值,否则会适当地增加到 1