问题标签 [many-to-one]

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

linq-to-sql - LINQ to SQL - 检索对象、修改、SubmitChanges() 创建新对象

我已经为此奋斗了一段时间。我正在尝试实现多对一关联。我在一张表中有一堆行,称为读数。这些随着时间的推移而积累,我时不时地想导出它们。当我导出它们时,我想创建一个名为 ExportEvent 的新对象,以跟踪导出了哪些行,以便在需要时重新导出它们。因此 Reading 与 ExportEvent 具有可为空的外键关系,因为我在导出读数之前创建读数。

我发现,当我进行导出时,是否首先创建 ExportEvent (evt) 并使用

或者如果我使用

当我调用 SubmitChanges 时,我总是得到一堆新的与 evt 关联创建的读数,并且原始记录没有更新。

我把它简化为最简单的,只是想看看我是否可以创建没有关联的两个对象,我什至发现当我刚刚检索所有读数并更新它们的 int 值时,submitchanges 仍然插入了一堆新记录. 这是怎么回事?

0 投票
1 回答
1492 浏览

nhibernate - NHibernate 多对一/一对一使用不同的键

大家好,我正在对 NHibernate 感到厌烦,并且遇到了一个难题,我一直在摸不着头脑,正在使用具有一些相当复杂关系的遗留数据库。

ClaimRoot 有一个 claimGUID 的主键。ClaimRoot 有一个与 claimGUID 关联的 Claimdetails 包(这是一种享受)。

问题是 ClaimRoot 还与 ClaimFinancials 具有可选的一对一关系(并非所有 ClaimRoot 都有 ClaimFinancials,但大多数都有)。但是 ClaimFinancials 的 PK 是一个 FormID 字段。此字段存在于 ClaimRoot 中,但不是 PK。

我在下面发布了一个映射,其中删除了额外的列以保护无辜者。

提前致谢!-鲍勃

0 投票
3 回答
4611 浏览

ruby-on-rails - Rails ActiveRecord 关系 - 有很多并且属于关联

我创建了 3 个模型:

  • 文章:包含一篇文章
  • 标签:包含标签
  • ArticleTag:用于将多对一标签与文章关系相关联。它包含一个 tag_id 和一个 article_id。

我遇到的问题是我对主动记录技术还很陌生,而且我不明白定义一切的正确方法。目前,我认为是错误的,是我有一个

现在,从这里我的想法是然后添加

我不确定我是否正确地接近这个。谢谢您的帮助!

0 投票
4 回答
12347 浏览

python - 多对一映射(创建等价类)

我有一个将一个数据库转换为另一个数据库的项目。原始数据库列之一定义行的类别。此列应映射到新数据库中的新类别。

例如,假设原始类别是:parrot, spam, cheese_shop, Cleese, Gilliam, Palin

现在这对我来说有点冗长,我希望将这些行分类为sketch, actor- 也就是说,将所有草图和所有演员定义为两个等价类。

这很尴尬 - 我更喜欢这样的东西:

但这当然会将整个元组设置为键:

任何想法如何在 Python 中创建一个优雅的多对一字典?

0 投票
2 回答
1127 浏览

java - 如何在没有来自所有者实体的链接的情况下在 JPA 中指定依赖项?

目标是在删除其所有者时删除所有依赖项。我有以下课程:

在当前实现中,Dependent 在其所有者被删除后仍然存在。

Owner 没有任何指向 Dependent 的链接,无法更改,因此我无法使用 @Dependent 注释或 cascade=DELETE。

JPA 是否支持这种“反向依赖”?另一个问题是在字段 _owner 被删除时 optional="false" 保证什么?

0 投票
2 回答
622 浏览

nhibernate - 当 NHibernate 中的引用发生变化时,如何删除被引用的对象?

我有两个这样的实体(仅提炼出相关的内容):

Person与 具有多对一关系Address,或者在对象方面, aPerson引用 an Address,并且此链接是单向的(Address没有对 的引用Person)。

现在,如果我使用此代码:

第一部分做它应该做的,它在数据库中创建一个新的Person和一个新的。Address

但是,第二部分将更新现有的Person并创建一个新的Address,但它不会删除现在孤立的第一个地址。为了让 NHibernate 认识到我正在更改对新实体的引用并自动“垃圾收集”孤立实体,我需要做什么?还是我必须手动执行此操作?

可能的解决方案

虽然我没有确凿的证据表明这确实发生了什么事,但我认为这个问题的原因是由于对象关系阻抗不匹配。在编程中,我们知道对象持有对其他对象的引用,一旦这些引用丢失,垃圾收集就会来删除那些不再有任何引用指向它们的“孤立”对象。在我提供的示例中,Person有对 的引用Address,一旦对 的引用Address丢失,它将被垃圾收集,假设没有其他Persons人也引用它。

在数据库方面,没有垃圾收集的概念。对数据库来说,只有一对多或多对多的关系,或者换句话说,一个父级和一个子级的集合。回到Personand ,我们看到这是一个从toAddress的一对多关系(每个人只能有一个地址,但一个地址可以属于很多人,比如一个家庭,拥有一个共同的地址)。数据库将 parent 和 the视为子项的集合。因此,通过删除 a ,也不应该删除 the是有道理的(换句话说,如果你有一个书架收藏着书籍,那么删除一本书不应该删除书架)。AddressPersonAddressPersonPersonAddress

那么我们如何解决这个问题呢?我们将不得不删除其子集合为空的所有父级。在这种情况下,应删除Address具有空集合的 an 。Persons这是一个业务规则,因为没有任何东西表明 anAddress不能单独存在,但是在我正在开发的应用程序中,Address如果 an 不依附于一个人,它本身就没有任何意义,因此应该被消除。但是,地址完全有可能保持孤立状态,直到其他地址Person出现并引用它。

0 投票
3 回答
7893 浏览

nhibernate - NHibernate Cascade none 仍在更新相关实体

然后我使用 Fluent NHibernate 及其自动映射功能来映射以下简化的 POCO 类:

然后,我将覆盖以下映射以明确设置从网页到网页类型的级联:

对于任何纯粹的 NHibernate 读者,这里是 fluent 生成的 xml 映射:

当我测试更新不会通过网页级联到 WebpageType 时,问题就来了,基本上他们会!

我有以下测试:

上述测试包含在一个全局事务中。

测试失败,NHibernate 确实对相关 WebpageType 的名称执行了更新。删除和保存(创建新)级联工作正常,不会级联。

我是否误解了级联和/或我的逻辑/测试有问题。

任何帮助/建议表示赞赏。谢谢。

0 投票
1 回答
837 浏览

java - 删除孩子时,休眠​​多对一会删除所有父母

我有 Country 和 State 对象。我打算从国家到国家建立单向的多对一关系。我不想在我定义映射的国家/地区中存储对州的任何引用,如下所示。当我删除一个 State 对象时,所有国家都会被删除!

0 投票
2 回答
9267 浏览

java - Hibernate:使用公式的多对一

我希望有人能帮我找到答案。

我正在使用旧数据库,我无法更改任何预先存在的表,因为其他应用程序依赖于它们。

我有三个主要的现有表:A,B,C

A 有一个参考 B 的列(多对一关系)。问题是它应该与 C 而不是 B 有关系。所以我创建了一个 *-1 映射 BC。

我不想有 B 或 BC 的 java 实体,只有 A 和 C,A 应该有一个字段 Ac

到目前为止,我尝试使用 @Formula 注释无济于事。

这将产生以下 SQL:

它显然失败了,因为表 A 中没有列 c_ID (为什么完全忽略公式?)。

删除 @ManyToOne 注释会产生:

这将是完美的,除非 Hibernate 需要一个 BINARY 值(类 C 的序列化?)并在转换它接收的 Integer 时抛出异常。

这个 ID 对于延迟加载应该足够了,但是我如何告诉它这样做呢?@ManyToOne 的任何使用都会破坏公式。

如何在不更改 A、B、C 表或创建 Java 类 B 或 BC 的情况下实现 AC 链接?

感谢您提供任何信息,丹

0 投票
2 回答
7509 浏览

java - 如何在 Hibernate 中以单向多对一的形式保留连接表?

我正在背负如何在单向多对一条件下加入表格?.

如果你有两个类:

B -> A 是多对一的关系。我知道我可以向 A 添加一个 B 集合,但是我不想要这种关联。

所以我的实际问题是,是否有创建 SQL 查询的 HQL 或 Criteria 方式:

这将检索所有引用 A 的 B 记录的笛卡尔积的所有 A 记录,并将包括没有 B 引用它们的 A 记录。

如果您使用:

那么它是一个内部连接,您不会收到没有 B 引用它们的 A 记录。

如果没有两个查询,我还没有找到这样做的好方法,所以任何比这少的都很好。

谢谢。