grails - 在grails中没有hibernate property-ref等效项

标签 grails gorm self-reference

我是grails的新手,当前正在尝试映射Employee类。每个员工可能有也可能没有经理。此外,每位员工(如果他是经理)都将有一个下属列表。 hasMany和belongsTo静态数组相对容易地映射到这种程度。但是,我的示例还有一个额外的复杂性。我的员工类(class)中有3栏:

  • id(主键)
  • ldapId(旧版ldap系统中的ID)
  • managerLdapId(旧系统的经理关系ID)。

  • 截至目前,我的Employee类看起来像这样-
    class Employee {
        String firstname
        String lastname
        String email
        String ldapId
        Employee manager
    
        static hasMany = [subordinates: Employee]
        static belongsTo = [manager: Employee]
    }
    

    问题是我想使用ldapId字段映射hasMany关系,但是grails默认将其映射到id字段。我可以将ldapId字段用作主键,但id字段也存在,并且它是此表的自然主键。

    我知道休眠可以在定义多对一关系时指定一个选项。它是property-ref属性,它允许将关系映射到主键以外的列。这样的属性(property)可用于grails吗?如果是这样,如何实施?

    总而言之,我需要知道如何将hasMany关系与该表的主键以外的其他键进行映射。

    最佳答案

    我认同:

    class Employee {
      String firstname
      String lastname
      String email
      String ldapId
      Employee manager
    
      static hasMany = [subordinates: Employee]
      static belongsTo = [manager: Employee]
    
      static transients = ['getId', 'setId']
    
      def getId() { ldapId }
      def setId(id) { this.ldapId = id }
    
      static mapping = {
        table 'Employee'
        id generator:'assigned', name:'ldapId', type:'string'
        ...
      }
    }
    

    不要忘记使ldapId唯一

    关于grails - 在grails中没有hibernate property-ref等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166761/

    相关文章:

    eclipse - 将作为 Eclipse 项目的 Grails 应用程序导出为 .war

    grails - Grails域类约束修改导致异常

    haskell - 具有单个构造函数的自引用数据类型不能为 `Show` n

    mysql。同一个表中重复的自增键

    grails - groovy的ProcessGroovyMethods(UNIXProcess)导致的错误结果

    grails - Grails-域类中的访问请求对象

    macros - 将其翻译成 Common Lisp

    grails - 有没有一种简单的方法可以对Grails域类中的列进行加密/解密?

    grails - 如何在Grails/GORM映射中要求某些列的值?