gpt4 book ai didi

mysql - 多态属于Grails中的多对多映射?

转载 作者:可可西里 更新时间:2023-11-01 08:07:56 27 4
gpt4 key购买 nike

所以我知道使用父类(super class)是可能的,但是,这在灵 active 上非常有限。所以我的问题是,我可以使用接口(interface)吗?阿拉的东西。

interface Taggable {
/*Adds tag(s) and returns a list of currently set tags*/
List<String> addTags(String ... tag)
/*Removes tag(s) and returns a list of currently set tags*/
List<String> removeTags(String ... tag)
}

class User implements Taggable {
String username
static hasMany = [tags:Tag]
}

class Tag {
String name

static hasMany = [references:Taggable]
static belongsTo = Taggable

static constraints = {
name(nullable: false, blank: false, unique: true)
}
}

我对具有以下标签的对象的引用感兴趣。然而,这个对象不能扩展一个具体的类。这就是为什么我想知道这是否可以通过接口(interface)来完成。

那么,可以做到吗?

最佳答案

Hibernate 可以映射接口(interface) - see example .我怀疑 Grails 是否在约定映射中支持这一点 - 但您可以尝试使用映射 annotations来自上面的示例,或 XML 配置。

编辑:回答评论问题:

在数据库级别,您必须有一个 Taggable 表,供 Tag.References 使用外键引用。

  1. 鉴别器不会打败多态性,如果它是自动添加的 - 例如,在每个层次结构的表映射中,Hibernate/Gorm 添加一个 class 字段以找出具体的类从数据库中读取对象时。

  2. 如果您将 Taggable 映射到两个表 - Taggable 部分映射到 Taggable 并将其他所有内容映射到特定表,引用 1 :1 - 所有鉴别器工作都应由 Hibernate 为您完成。

顺便说一句,class 字段很长 - 它包含完全限定的类名

编辑 2:无论哪种方式,它都变得非常复杂,我个人会采用我建议的方法 in another question :

  • 动态查询所有具有 hasMany=[tags:Tag] 属性的 Taggable 接口(interface)的类;
  • 或者,不太可取 - 拥有一个手工制作的子表和一个鉴别器。

关于mysql - 多态属于Grails中的多对多映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com