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

grails应该映射到另一个类中的属性

狄心水
2023-03-14

在Grails中,当子类可以属于父类中的两个属性之一(但不能同时属于两个属性)时,我很难理解Belongsto-HasMany关系的概念。

例如:

class Store {
    Integer storeNumber
    List employees
    List managers

    static hasMany = [employees:Person,
                      managers:Person]
}

class Person {
    String name
    String roll

    static belongsTo = [store:Store]

    static constraints = {
        role inList: ['employee','manager']
    }
}

其中Person位于Store.Employees列表或Store.Managers列表中

事先谢谢....

共有1个答案

靳越
2023-03-14
class Store {
    Integer storeNumber
    //List employees
    //List managers

    static hasMany = [employees:Person,
                      managers:Person]
    static constraints = {
      employees(nullable:true)
      managers(nullable:true)
    }
}

class Person {
    String name
    String roll

    static belongsTo = [store:Store]

    static constraints = {
        role inList: ['employee','manager']
    }
}

现在添加一个存储

Store store = new Store(storeNumber: 1).save()
if (store) {
  Person person = new Person(name:'fred', roll:'employee', store:store).save()
  if (person) {
    store.addToEmployees(person)
  }
}

所以明显的头痛的收获是一种快速的反向查找父级的方法,替代的方法是下面描述的松散关系,它不关心父级,这样你就不需要这最后一点,而且明显的松散了你到目前为止遇到的依赖问题

结束E2A

你需要一个才能有另一个关系

或者,如果你不关心财产关系,那么事情就会变得更简单,比如

static belongsTo = Store

那么这个因素就不再是一个问题了。

无论哪种方式,您都可以始终从父级开始查询,然后连接子级并查找子级方面

先生,有什么适合您的呢

最后编辑你知道,当你做这件事多年,你找到了以另一种方式做事情的方法:

Class User {
     String username
    static hasMany=[childs:Children]
}

Class Children {
    String firstName
    static belongsTo=User

   // now to get access back to parent user without knowing parent a hackish thing like this can be done:

    User getUser() {
        User.findByChilds(this)
    }
    String getUserName() {
        return user?.username
    }

}
 类似资料:
  • 今天我遇到了这个烦人的bug,花了我几个小时才解决。我在spring boot申请中有以下enity类 入口模型类 和用户模型类 } 如您所见,Entry类与User类具有ManyToOne关系(一个用户有许多条目)。如果从User类中删除单参数构造函数并尝试将Entry对象保存到数据库,则会出现以下错误: JSON分析错误:无法构造的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方

  • 问题内容: 考虑以下类别: 映射到“订单”表。是否可以通过外键关系将客户名属性映射到客户表? 问题答案: 是的,您可以为此使用联接映射元素。另一种选择是映射视图而不是表。但是,如果可能的话,您应该采用面向对象的方法,并绘制订单和客户之间的多对多关系。

  • 我是Java中Spring框架的新手。并且有一些问题… 我的应用程序使用Spring、Spring seq的安全性、Hibernate框架。 我正在编写一些简单的应用程序。 我有一个页面,可以通过Hibernate将用户添加到db。 用户类: 角色类: 保存在控制器中: 在UserDAO中保存 我在页面上有一个选择块,我可以在其中选择用户角色作为字符串。 所以在保存用户时,我有 所以据我所知,我应

  • 下面是的代码片段,它引用了col1和col2 这种情况有什么解决办法吗? parentPK.java java转换为@embedbable,扩展了parentpk.java 在上面,映射col1和col2是从parentpk.java继承来的,如果在xml映射中的某个ownerclass.java中使用ChildPk作为外键,但在带注释的映射中不能使用,则可以访问它们。 我不能改变我的类的结构,因

  • 下午好: 我最近创建了一个类“X”,它包含一个单一属性“network”,定义为一个映射,使用字符串作为键,另一个映射作为值(double map)。对于此类,将使用“hashmap”实现。 该类大致如下所示: 但是,当我执行函数中包含的network.put指令时,编译器会自动检测到一个错误:“表达式预期”。如果可能,我想知道在向映射中添加新的键值元素时是否使用了错误的语法,或者是否是映射的初始

  • “userinfo”在活动的顶部声明为