当前位置: 首页 > 知识库问答 >
问题:

财产行为

弓宏茂
2023-03-14

两者之间有什么区别

静态归属[作者:作者]

Class Author{
    String name 
}

Class Books{
    String name
    static belongsTo = Author
}

当static bongsto=Author保留在Books域中时,对数据库没有影响。但是,静态bongsto=[author:author]创建了对author类的反向引用,并且在DB中还有author_id列。因此,实际只使用静态bongsto=Author所做的事情。这是在grails文档(http://grails.github.io/grails-doc/latest/ref/domain%20classes/belongsto.html)中阐述的。

还有,使用以下两种有什么区别:

Class Books{
    String name
    static belongsTo = [author : Author]
} 
Class Books{
    String name
    Author author
}

静态bongsto=[author:author]仅用于级联目的,这是真的还是它有不同的用例。

谁能详细解释这些而不把它与hasOne或hasmany联系起来。提前道谢。

共有1个答案

路雅懿
2023-03-14

使用belongsto而不使用反向引用对于多对多关联是必要的。例如,假设您有以下域类:

class Book {
    String name
    Author author

    static hasMany = [categories: Category]
}

class Category {
    String name

    static hasMany = [books: Book]
}

如果您尝试按原样使用它们,则会遇到如下异常:

在多对多关系中的域类[class Book]和[class Category]之间没有定义所有者。示例:static bongsto=Category

解决方案是使其中一个域类成为多对多关联的所有者。使用我的示例,我认为让类别成为所有者更有意义。但是,反向引用将无法工作,因为可能存在多个category。因此,这就是没有反向引用的belongsto的作用:

class Book {
    String name
    Author author

    static hasMany = [categories: Category]
    static belongsTo = Category
}
 类似资料:
  • 问题内容: 在程序运行之前,我需要从一个不知道的位置将一些属性加载到Spring上下文中。 所以我认为,如果我有一个不带位置的PropertyPlaceholderConfigurer,它将从系统属性中读取,然后可以在上下文中使用该位置:property- placeholder 像这样 但这是行不通的 保罗 问题答案: 这里的问题是您正在尝试使用属性占位符语法配置属性占位符:)这有点像鸡和蛋的情

  • 在Java 8中,我如何使用API通过检查每个对象属性的清晰度来过滤集合? 例如,我有一个对象列表, 将对对象使用默认的相等性检查,因此我需要类似于, 不幸的是,方法没有这种重载。如果不修改类中的相等性检查,是否可以简洁地执行此操作?

  • 静态编程语言中的属性和开放属性有什么区别?下面的代码抱怨我声明setter私有,Intellij说开放属性不允许私有setter。什么是开放属性? 为什么上面的代码无效,而这个代码有效? 编辑:我使用的是spring-allopen插件,将类显式标记为open并没有什么不同。

  • 问题内容: 在python中,我可以使用装饰器向类添加方法。是否有类似的装饰器将属性添加到类?我可以更好地表明我在说什么。 我上面使用的语法是否可能还是需要更多的语法? 我想要类属性的原因是可以延迟加载类属性,这似乎很合理。 问题答案: 这是我的处理方式: 在我们打电话时,设置员没有工作 ,因为我们正在打电话 ,而不是。 添加元类定义可以解决此问题: 现在一切都会好起来的。

  • 问题内容: 当您这样做时: “类”字段到底是什么?我在API文档中找不到它。它是继承的静态字段吗? 我认为保留关键字不允许用作实体名称。 问题答案: 请阅读 : 类文字是由类,接口,数组或原始类型的名称或伪类型void组成的表达式,后跟“。”。和令牌类。类文字的类型C.Class,其中C是类,接口或数组类型的名称,是Class。如果p是原始类型的名称,则令B为装箱转换后的类型p的表达式的类型(第5

  • 我在对象映射器上使用Jackson的readValue()方法从JSON文件中读取并将其转换为我的java对象。 如。 我可以在MyTargetClass上设置任何注释来强制执行所需的属性吗?例如,如果我有一个属性为ABC、DEF和GHI的JSON对象,我的JSON如下 我希望它以某种方式失败,并且只有在readValue上成功,如果它包含ABC、DEF和GHI。