问题标签 [many-to-many]
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.
java - 在 Hibernate 中通过映射表值排序
我有一个 @ManyToMany 映射,其中表通过映射表进行自我引用,我们想在实际映射表中的订单 ID 上进行排序,但发现很难配置它。
我们可以在 hibernate xml 中执行它,因此很自然地假设 JPA 注释中存在支持。有人知道我们如何对映射表中的值进行排序吗?
表格是:
而自引用的映射表为:
在 Hibernate Annotations 中,我们有:
这是我们在 hibernate xml 中执行它的方式:
所以我们想使用@OrderBy 标签但不能引用映射表中的inorder 值。有任何想法吗?谢谢。
(我们已经在代码中的 children 集合上尝试了 @OrderBy(intorder) ,但这对我们来说并没有奏效)
django - 如何防止在 Django Admin 中对 FK / MTM 字段进行自我(递归)选择
给定具有 ForeignKeyField (FKF) 或 ManyToManyField (MTMF) 字段的模型,其外键为“自我”,我如何防止在 Django Admin (admin) 中进行自我(递归)选择。
简而言之,应该可以防止在管理员中自我(递归)选择模型实例。这适用于编辑模型的现有实例,而不是创建新实例。
例如,新闻应用中的文章采用以下模型;
如果有 3 个实例(标题:a1-3),当通过管理员Article
编辑现有实例时,该字段默认由一个 html(多个)选择框表示,该框提供所有文章的列表 ( )。用户应该只看到并能够选择除自身以外的实例,例如在编辑a1 时,可用于选择 = a2、a3。Article
related_articles
Article.objects.all()
Article
Article
related_articles
我目前可以看到 3 种可能的方法来做到这一点,按偏好递减的顺序排列;
- 提供一种方法来设置查询集,在管理表单字段中提供可用选项
related_articles
(通过排除查询过滤器,例如Article.objects.filter(~Q(id__iexact=self.id))
,从用户可以查看和选择的相关文章列表中排除正在编辑的当前实例。创建/设置要使用的查询集可以在__init__
自定义的构造函数 () 中发生Article ModelForm
,或者通过某种动态limit_choices_to Model
选项发生。这需要一种方法来获取正在编辑的实例以用于过滤。 - 覆盖or类的
save_model
函数以在保存实例之前检查并从中删除自身。这仍然意味着管理员用户可以查看和选择所有文章,包括正在编辑的实例(对于现有文章)。Article Model
ModelAdmin
related_articles
- 当需要在管理员之外使用时过滤掉自我引用,例如模板。
理想的解决方案 (1) 目前可以通过管理员外部的自定义模型表单来完成,因为可以将正在编辑的实例的过滤查询集变量传递给模型表单构造函数。问题是,您能否获得Article
实例,即在创建表单之前正在编辑“自我”以执行相同的操作。
可能是我以错误的方式解决这个问题,但是如果您允许将 FKF / MTMF 定义为同一模型,那么应该有一种方法让管理员 -做正确的事情- 并阻止用户通过以下方式选择自己在可用选项列表中排除它。
注意:现在可以执行解决方案 2 和 3,并提供解决方案以尝试避免将这些作为答案,理想情况下,我希望得到解决方案 1 的答案。
django - 在 Django 中查找多对多类别树的根
我有一个 Django 模型,例如:
每个类别可能存在于许多父母中。有些类别没有父类别,它们是“根”类别。在简单的 SQL 中,我可以通过以下方式找到它们:
事实上,这很好用。如何通过 Django-y 调用找到“没有父母的类别列表”?我试过:
但如前所述,两者都不起作用。
sql - SQL多对多查询问题
我有三个表:视频、视频类别和类别。
表格如下所示:
在我的应用程序中,我允许用户多选类别。当他们这样做时,我需要返回每个选定类别中的所有视频。
我最终得到了这个:
但是对于我添加到多选的每个类别,我都必须在我的内部选择中添加一个连接:
我不禁觉得这是真正错误的方法,但我在试图看到正确的方法时被阻止了。
grails - 多对多不存在于 gorm/grails 应用程序中
我的 grails 1.1 应用程序中大致有以下内容
创建了正确的表(app、app_category 和 app_categories)并且列看起来都很好,但我最终没有在关联表中得到任何记录,也没有错误。app_category 表和 app 表已正确填充。
我是否需要手动管理关联表的域对象?或者更好的是,我只是错过了一些完全明显的东西吗?
hibernate - 无法使用 Hibernate 3.3.1GA 进行多对多工作
我有一个简单的多对多映射:
而这个测试用例:
测试失败。在日志中,我可以看到:
所以创建了正确的表,双主键没问题,外键是正确的。
坚持item
不做正确的事情:
如您所见,项目本身是持久化的,但不是包含类别的集合(连接表中的插入丢失)。但是集合中有值!
当它读取项目时,它会查询连接表:
但当然,它什么也找不到。怎么了?为什么休眠考虑连接表find()
而不考虑连接表persist()
?
我正在使用 Hibernate 3.3.1,Hibernate Annotations 3.4.0
[编辑] 为了解决这个问题,我尝试引入双向映射。首先,我将此代码添加到Category
:
然后,我更改了测试以更新双方:
我什至再次坚持分类。结果:什么都没有。Hibernate 很高兴地忽略了多对多映射。
作为第二个修复,我尝试按照@JoinTable
zoidbeck 的建议添加注释:
再次,什么都没有。
hibernate - 没有复合键的休眠中的多对多
我正在处理遗留数据库。我正在使用 pojos & hibernate & HSQLDB编写单元测试。我收到以下错误:
假设我有Post
和Tag
实体(当然还有他们的表posts
和tags
)。Post
还有另一个表来定义和Tag
调用之间的多对多post_tags
。
因为post_tags
包含一些关于关系的额外信息,比如active
和deleted
列。我创建了另一个实体PostTag
来处理这个问题。
在这里描述我的问题是伪类:
当我查看生成错误的语句时,似乎 Hibernate 正在尝试使用 来制作复合键PRIMARY KEY (post_id, tag_id)
,并且它也尝试使用post_id
identity
.
谁能帮我解决我的问题?
更新:
因为我正在处理一个遗留数据库,所以这只是一个演示问题的示例。但是我会尽量按照例子翻译实际的语句(PS:不是ALTER TABLE
它是a CREATE TABLE
):
python - 如何在不知道子类名称的情况下访问 django 中对象的子类?
在 Django 中,当您有一个父类和多个从它继承的子类时,您通常会通过 parentclass.childclass1_set 或 parentclass.childclass2_set 访问一个子类,但是如果我不知道我想要的特定子类的名称怎么办?
有没有办法在不知道子类名的情况下获取父->子方向的相关对象?
python - 通用多对多关系
我正在尝试创建一个消息系统,其中消息的发件人和收件人可以是通用实体。这对发件人来说似乎很好,只有对象可以引用(GenericForeignKey),但我不知道如何为收件人解决这个问题(GenericManyToManyKey ??)
下面是一个简化的例子。PersonClient 和 CompanyClient 从 Client 继承属性,但有自己的特定细节。最后一行是症结所在。如何让消息接收者成为一组 CompanyClients 和 PersonClients
vb.net - 如何为多对多关系插入实体?(实体框架)
如果我在用户和角色之间存在多对多关系,并且我有一个用户实体的实例和多个角色ID,我可以在没有任何其他角色数据且不进行选择的情况下插入这两种类型的实体之间的关系先说角色?
更新:
我可能还不够清楚。我没有角色的实例,只有角色 ID。是否可以在不先从数据库中填充 Role 对象的情况下创建 User 和 Role 之间的关系?