问题标签 [composite-id]

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 回答
1076 浏览

nhibernate - NHibernate 3.3:生成了带有键属性的复合ID?

我读过这个映射在 NHibernate 3.3 中是不可能的:

基本上我需要一个由 NH 自动计算的复合 ID 属性。

也许存在一种技术来获得类似的东西?

提前致谢。

0 投票
2 回答
297 浏览

c# - FluentMapping ComposedId 与 AutoInc

我正在为公司应用程序创建一个传输数据工具,将数据从旧版本移动到新版本,然后再返回。由于现在我们使用 NHibernate 和 FluentMapping,我将不得不映射所有旧表,并且一张具有组合主键的表存在问题。该表如下所示:

而且我需要将上述所有字段映射为复合键,唯一的问题是“序列”基于其他字段递增以避免重复键,其他字段是外键和简单字符串的混合。有没有办法做这个映射?如果需要创建表达式来计算序列,没问题。

好消息是新系统中的表只使用了一个整数 ID。

0 投票
2 回答
721 浏览

java - 如何使用复合 ID 解决 Session.get() 的奇怪行为?

我正在尝试在没有映射复合标识符的情况下声明复合 id 的对象的会话上执行获取。
使用的休眠版本是 3.5.5。

获取代码是通用的,并读取包装实际数据的容器对象:

代码对实际映射一无所知,因此它必须查阅有关 id 的元数据。

如果映射定义如下:

没有复合标识符类,id 等于对象本身并且等于包装器引用。
当我执行 session.get() 而不是从数据库中获取对象时,它返回与传入 id 的对象相同的对象(不是相等的对象,而是对象的相同实例)。
更新:实际上 session.get() 从数据库中加载对象,in传递的 id 对象并将其返回。我监督最初认为它跳过加载。

到目前为止我发现的解决方案是引入映射的复合标识符并将映射更改为:

SurrogateKey 被定义为具有两个字段和根据需要的等于/哈希码的对象。
通过 metadata.getIdentifier() 返回的更改 id 是 SurrogateKey 的一个实例,并且 session.get() 从数据库中获取对象(如果存在)。

映射修复的问题是标准和 HQL 的属性名称从标识符更改为id.identifier,这实际上破坏了许多现有代码。

我目前正在探索的事情是:

  1. 有没有办法在不声明 Id 类的情况下使 session.get() 工作(我知道这是一种不鼓励的做法,但所需的更改量可能会令人望而却步)?
  2. 替代方案是否可以告诉hibernate像以前一样对待属性,而不添加id。在他们面前?
  3. 将hibernate升级到v4(由于依赖项目和审批流程并不容易)?
  4. 还有其他可用的选项/解决方法吗?

到目前为止,我只设法使上述解决方案起作用,但我正在寻找侵入性较小的解决方案,并且希望能提供任何线索、建议和指向相关文档的指针。

0 投票
0 回答
850 浏览

java - 休眠复合ID作为其他复合ID的一部分

我尝试将映射写入表。我决定 id 和 versionId - 用于表测试的复合 ID。但在表 test_question 中,我的复合 ID 由 question_id、test_id 和 versionId 组成。我无法理解,因为我可以使用一个复合 ID id-versionId 作为其他复合 ID 的一部分。

我有脚本的下一个和平。

还有我的映射

测试.hbm.xml

对于 TestQuestion.hbm.xml

表 TestQuestion 中的 id 应该是什么?我的意思是 QUESTION_ID-TEST_ID-VERSION_ID 是整个复合 ID。

0 投票
1 回答
1407 浏览

hibernate - Hibernate - 使用复合 ID 连接表

我有一个人员表 ( PersonID) 和一个地址表 ( AddressID)。我想创建一个名为Person_Addresswhich mapsPerson->Adress使用ManyToMany关系的新联接表,并且我必须将主键指定为两个主键 ( PersonID - AddressID) 的组合。

如何使用 Hibernate HBM 语法来做到这一点?

0 投票
0 回答
225 浏览

fluent-nhibernate - 如何在流畅的 nhibernate 中的一对多映射中使用复合 ID?

我遇到了一个复合 ID 唯一标识实体的场景。我将 MSSQL 定义为在这些字段上有多个主键。此外,我希望使用自动递增的 id 来引用一对多关系。这是架构:

映射如下所示:

现在,问题是我想在字符上使用 SaveOrUpdate() 并使用复合 id 进行更新,因为字符唯一性由这 3 个字段定义 - 区域、领域、名称。但是,当我从 CharProgression 引用字符时,我不想使用复合 Id,因为我不希望 char_progression 表包含 3 个字段来识别字符,一个简单的 Id 就足够了......这就是为什么我还在 Character 实体上定义了一个 IDENTITY id。

我正在尝试的可能吗?还是有其他方法可以实现这一目标?

谢谢 :)

0 投票
1 回答
849 浏览

hibernate - 休眠加入2行

为了使我的java代码更容易,我想将两行合并为一,因为我真的需要这两行才能使用数据。

假设这些是我表的字段:

显然,ID 是主键。FIELD1 和 2 让我们识别 2 行的“组”,它们仅通过 DISCRIMINATOR 和 VALUE 不同(鉴别器指示值代表什么)

我希望每个“组”有一个 POJO(其中 FIELD1 和 2 将用作复合 ID),例如:

在哪里 :

VALUE1 = 鉴别器 A 的 VALUE

VALUE2 = 鉴别器 B 的 VALUE

在 SQL 中,我会这样请求它:

不幸的是,我不知道如何让它在休眠状态下,我现在对所有的可能性感到困惑。

我宁愿将解决方案作为映射的 XML,但如果别无选择,仍然会采用注释解决方案。

0 投票
0 回答
406 浏览

hibernate - 与 Composite-id 的映射关联

我是 Hibernate 的新手,我对如何代表这种情况有疑问:

--> 表消息:-(PK)MsgSender -> 表“用户”的外键 -(PK)MsgDestination -> 表“用户”的外键 -(PK)MsgDateSend - MsgContent - IsReaded

--> 表用户 -(PK) 用户名​​ - ...

这是我的 Message.hbm:

这是我的 POJO:类消息:

类消息 ID:

使用这种结构,Hibernate 不会进行插入、删除……有没有人可以帮我解决这个问题?

提前致谢。

0 投票
2 回答
1159 浏览

nhibernate - 不存在键多对一记录的休眠复合 ID

我有旧的遗留数据库,它们的表中有死链接。我有像这样在 nhibernate 中映射的类:

和:

现在,当数据库中的所有连接都正确时,一切正常,但是当我找到没有实体的 sub_object_id 时,nhibernate 会抛出错误

有没有办法映射复合键,以便在找不到它的子实体时,不会加载整个实体(如内部连接)?

NHibernate v2.0.50727

0 投票
1 回答
423 浏览

c# - Fluent NHibernate CompositeId trying to insert null values

I am working to map an existing database using Fluent NHibernate and have encountered a problem when it comes to complex many-to-many relationships (additional columns).

I know that many-to-many relationships with additional columns have to be mapped as HasMany rather than HasManyToMany as they are not pure many-to-many relationships. The linking table has to be mapped as a class within itself, which I have done in the example below.

When loading this data from an existing database it loads fine. The project I am working on takes this data and inserts it into an empty database, which is where the problem occurs. I think that when inserting into the new database the CompositeId is trying to insert NULL values for ItemID and ItemGroupID which is not allowed in the database. Changing the database structure is not a viable option at this point, is there a way around this issue?

Thanks, example code below.


Entity Classes

Mapping Classes