问题标签 [self-reference]

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

ruby-on-rails - has_many 通过自引用关联

我想(作为一个例子)has_many为一个人的朋友的所有帖子创建一个关联,比如has_many :remote_posts给我一些类似person > friends > person > posts.

..这就是我将如何去做




现在,

...我得到这个错误..

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: people.person_id: SELECT "posts".* FROM "posts" INNER JOIN "people" ON "posts".person_id = "people".id WHERE (("people".person_id = 1))

除了外键错误 - 似乎友谊协会根本没有发挥作用。我在想这可能是因为:source => :posts, 因为posts协会会加入它两次。

我可以写一些finder sql(这就是我目前正在工作的),尽管我更愿意这样做。

关于如何让它发挥作用的任何想法?

0 投票
1 回答
1290 浏览

cocoa - 核心数据:迁移具有自引用属性的实体

我的核心数据模型包含一个实体 Shape,它有两个自引用关系,这意味着四个属性。一对是一对多关系(Shape.containedBy <->> Shape.contains),另一对是多对多关系(Shape.nextShapes <<->> Shape.previousShapes)。这一切都在应用程序中完美运行,所以我不认为自引用关系通常是一个问题。

但是,在将模型迁移到新版本时,Xcode 无法编译自动生成的映射模型,并显示以下错误消息:

“包含”是自引用属性之一的名称。无论如何,真正的大问题是我什至无法查看此映射属性,因为在查看映射模型时,一旦我选择实体映射,Xcode 就会崩溃。所以我有点迷失从这里去哪里。我真的无法删除自引用属性,所以我想我已经手动创建了一个可以编译的映射模型?有任何想法吗?

干杯

0 投票
7 回答
70915 浏览

python - 如何获取对模块本身内部模块的引用?

如何从该模块中获取对该模块的引用?另外,如何获得对包含该模块的包的引用?

0 投票
8 回答
172 浏览

.net - 为什么不做任何事情的语句不抛出异常(或警告开发人员)?

我已经被 VB.NET 中的语句(不确定 C# 中是否存在这种效果)所困扰,这些语句似乎是自引用的,但是当它们被执行时,它们实际上并没有做任何事情,因为它们需要一个目标,一个没有提供。例如:

在这两种情况下,语句需要一个目标来将结果分配给 .NET 似乎并不困扰,而且我不给它一个目标。IDE/编译器是否有原因没有警告我这种效果,或者没有抛出异常“StatementDoesntDoAnything”?由于代码的形成方式永远不会改变任何东西,因此很明显是输入错误。

0 投票
3 回答
3960 浏览

java - Hibernate3:自引用对象

需要一些帮助来理解如何做到这一点;我将在文件系统上运行递归“查找”,我想将信息保存在单个数据库表中 - 具有自引用层次结构:

这是我要填充的数据库表结构。

目录对象表:

这是我要映射的建议 Java 类(仅显示字段):

对于“根”目录将使用 parentid=0; 真实ID将从1开始,理想情况下我希望休眠自动生成ID。

有人可以为此提供建议的映射文件吗?作为第二个问题,我考虑过像这样做 Java 类:

我可以为这两种方法中的任何一种使用相同的数据模型吗?(当然使用不同的映射文件)。

--- 更新:所以我尝试了下面建议的映射文件(谢谢!),在这里重复以供参考:

...并将我的 Java 类更改为同时具有“parentid”和“getSubDirs”[返回一个“HashSet”]。

这似乎有效 - 谢谢,但这是我用来驱动它的测试代码 - 我想我没有在这里做某事,因为我认为 Hibernate 会负责将子对象保存在 Set 中,而我不必这样做这明确吗?

0 投票
1 回答
621 浏览

ruby-on-rails - Rails 2.3 中的自引用关联

我有一个名为 test 的模型,并且 test 可以有很多测试,并且应该能够引用它的父测试(如果存在)。例如

  • 测试 <-- 父级不存在
    • 测试
      • 测试
      • 测试
        • 测试
      • 测试
    • 测试
  • 测试 <-- 父级不存在

在 2.3 之前,我已经看到了一些可能的解决方案,但模型处理引用的方式似乎自 2.0 以来发生了很大变化。我想知道是否有人有最好的路线选择来做到这一点,并且有一些 2.3 的精巧度。有什么建议么?

0 投票
1 回答
1299 浏览

cakephp - 有时在 cakephp 作品中编辑自引用 HABTM

我正在与参与者一起使用自引用 HABTM 模型。您注册了一个活动,当您登录到您的预订/个人资料时,您会看到其他参与者的列表,您可以选择将自己和其他人添加到不同的组中;共享酒店房间,共享机场交通等。

到目前为止我所管理的:

1) 在我的个人资料中,我看到所有其他参与者的列表,带有复选框。到目前为止很棒。
2)添加另一个参与者工作正常。下次我编辑时,我添加的参与者显示为已选中。
3)删除另一个参与者也可以,只要您在提交之前仍然检查参与者!

再说一遍:

有3名参与者。我以其中之一的身份登录,我在参与者列表中看到另外 2 个人。我选择检查他们两个。这工作正常(总是)。后来我选择删除其中一个(通过取消选中复选框并点击提交)。这也可以正常工作(总是)。如果我想删除最后一个复选框......没有任何更新(总是!)。奇怪的是,我可以添加和删除任何奇怪的参与者组合,除非我选择一次性删除所有参与者(删除一个且唯一的参与者是“删除所有已检查的参与者”的特殊情况),否则它将始终有效。

据我所知,HABTM 的工作原理是首先删除所有关系,然后重新保存它们。当我一遍又一遍地删除、添加、删除、添加同一个参与者时,我可以在我的表格中看到 - HABTM 表格上的 id 总是在增加。但是,当我一次取消选择所有参与者时,关系不会更新。id 保持不变,所以就像保存从未发生过一样。

这种行为是如此具体和奇特,我觉得我在这里遗漏了一些明显的东西。无论如何,这是相关的代码:

模型

控制器

看法

我正在使用稍微修改过的帮助程序 habtmCheckBoxes,可在此处找到:http ://cakeforge.org/snippet/detail.php?type=snippet&id=190 它的工作原理如下: function habtmCheckBoxes($rows=array(), $selectedArr =array(), $modelName, $wrapTag='p', $checkedDiv, $uncheckedDiv) {}

0 投票
2 回答
774 浏览

mysql - 从自引用表中获取父母身份

假设您有下表: items(item_id, item_parent) ... 它是一个自引用表,因为 item_parent 引用 item_id。

您将使用什么 MySQL 支持的 SQL 查询来选择表中的每个项目以及一个布尔值,该值指示该项目是否是父项目/是否有其他项目引用它?

如果表中有以下数据:

...查询应该能够检索以下对象集:

{"item_id":1,"is_parent":0}
{"item_id":2,"is_parent":1}
{"item_id":3,"is_parent":1}
{"item_id":4,"is_parent": 0}
{"item_id":5,"is_parent":0}

0 投票
2 回答
2666 浏览

fluent-nhibernate - Fluent NHibernate 自引用多对多

我有一个名为 Books 的实体,它可以有一个名为 RelatedBooks 的更多书籍的列表。

缩写的 Book 实体看起来像这样:

这是这种关系的映射

以下是在 RelatedBooks 表中生成的数据示例:

当我尝试删除一本书时会出现问题。如果我删除 ID 为 1 的书,一切正常,RelatedBooks 表删除了两条相应的记录。但是,如果我尝试删除 ID 为 3 的图书,则会收到错误消息“DELETE 语句与 REFERENCE 约束“FK5B54405174BAB605”冲突。冲突发生在数据库“Test”、表“dbo.RelatedBooks”、列“RelatedBookId”中'”。

基本上正在发生的事情是无法删除 Book,因为 RelatedBooks 表中 RelatedBookId 为 3 的记录永远不会被删除。

当我删除一本书时,如何删除该记录?

编辑

将 Cascade 从 SaveUpdate() 更改为 All() 后,如果我尝试删除 ID 为 3 的书,同样的问题仍然存在。同样将 Cascade 设置为 All(),如果删除 ID 为 1 的书,然后所有 3 本书(ID:1、2 和 3)都被删除,这样也不起作用。

查看当我删除 ID 为 3 的 Book 时调用 Book.Delete() 方法时执行的 SQL,看起来 SELECT 语句正在查看错误的列(我假设这意味着 SQL DELETE 语句会犯同样的错误,因此永远不会删除该记录)。这是 RelatedBook 的 SQL

对于特定情况,WHERE 语句应该看起来像这样:

解决方案

这是我必须做的才能让它适用于所有情况

映射:

代码:

0 投票
1 回答
2505 浏览

entity-framework - 实体框架自引用分层多对多

好的,这个问题已经解决了。

从概念上讲,我有一个资源实体,它可以有许多子资源和许多父资源。Resource 表有两个字段,ID 和 Name,ID 是主键。

为了完成多对多关系,我创建了一个 ResourceHierarchy 表,它有两个字段(Parent_ID,Child_ID)和两个外键,每个外键都引用资源表 (ID) 的主键,并且 ResourceHierarchy 表有一个复合主键(父 ID、子 ID)

现在我们已经知道每个资源都可以作为其他资源的父级或子级,但是从逻辑上讲,并非所有资源都会有父级,但这不是重点。例如,假设我的资源表中有以下资源。

在 ResourceHierarchy 表中,我们有以下关系。

然后实体框架生成实体,到目前为止一切顺利......

如果您要检查 edmx 文件中生成的代码,您会看到 ResourceHierarchy 表被视为关系,并且 ResourceHierarchy 表无法通过代码访问,因为它没有被视为实体。

如果这就是我想要的,那么它会很完美。

但是,当我想将数量列添加到资源实体层次结构时,问题就开始了。例如,小房子只有一个前门和一个屋顶,但屋顶和瓷砖怪物资源可以有许多屋顶瓦片。

因此,如果我们在 Resource 表中添加一个 Quantity 列,那么我们会得到以下信息。

这就产生了屋顶和瓦片怪物必须共享 5 个屋顶瓦片的问题。所以很自然地,我会尝试将数量列添加到 ResourceHierarchy 表中,但是一旦我这样做并刷新生成的代码,现在将 ResourceHierarchy 表视为一个实体,而不是以前的关系。现在为了回到资源表,我必须通过这个非概念性的“实体/关系”,这不是很直接。就像我的概念模型中有一个实体,它只用于遍历资源实体,我什至不确定 Resource.Children.Add(r) 是否会在数据库的 ResourceHierarchy 表中创建新行. 这就像我会从我仅用作关系的实体中挑选属性,即数量。

理想情况下,ResourceHierarchy 表的 Quantity 列应如下所示。

并且资源实体仍将具有子项、父项导航属性,并以某种方式访问​​数量列作为资源实体的属性。

我尝试将生成的代码从具有数量列和没有数量列合并,但引发异常,我将其解释为 ResourceHierarchy 表可以是关系或实体,但不能两者兼而有之。

请帮忙!

随着数据库中 ResourceHierarchy 表中数量列的添加和排除,edmx 发生了巨大变化。

这是一个示例比较,唯一的区别是 Resource 是 ResourceType 而 ResourceHierarchy 是 ResourceTypeHierarchy。

SSDL 存储模型除了 ResourceTypeHierarchy EntityType 中的一个额外属性外没有任何变化,因此我不会在下面包含它。

资源类型层次结构中没有数量列

资源类型层次结构是一种关系

在资源类型层次结构上有数量列

资源类型层次结构现在是一个实体