grails - GORM映射 View

标签 grails gorm

我有一个名为Contact的域类,具有多个hasMany关系和另一个域类Employee,它是Concat的一部分。
Contact有一个表contact,并且Employee应该映射在如下所示的View上:

SELECT * FROM contact where employee=1
Employee应该具有与Contact相同的列和关系,如何编写域类?
我可以使用继承吗?

编辑

现在,我使用了这样的继承:
class Employee extends Contact { }
class Contact{
    static mapping = {
    tablePerHierarchy(false)
    }
}

到目前为止,该方法仍然有效,但现在我想向Employee添加一些关系,如下所示:
 class Employee extends Contact {      
     static belongsTo = [CostCenter ]
     static hasMany = [costCenter: CostCenter]
     static mapping = { 
     costCenter joinTable: 'employee_cost_center', column: 'employee_id'
     }
 }
 class CostCenter {
   static hasMany = [employees:Employee]
    static mapping = { 
     employeesjoinTable: 'employee_cost_center', column: 'cost_center_id'
     }
 }

现在我有一个问题,表'employee_cost_center'引用了很好的Contact,但还添加了'employee_id':
contact_id
employee_id
cost_center_id

所以我可以将关系添加到Contact中,但是然后我在CostCenter Contact中而不是Employee中。

如何添加关系到Employee

最佳答案

我认为您正在使用继承。由于Employee由选择Contact子集的数据库 View 支持,因此EmployeeContact。因此,您有一个很好的继承候选人。

每个子表的继承

您描述了employee View ,如下所示:

SELECT * FROM contact where employee=1

使用每个子类的表继承时,为子类生成的表包含以下列:
  • ID(主键)
  • 添加到子类的属性(不在父类(super class)中)的列,不包括关联的属性。

  • 由于Employee不会(也不能添加)其他属性,因此 View 应仅返回主键。
    SELECT id FROM contact where employee=1
    

    我有一个article,它可以将每个层次结构的表与每个子类的继承进行比较,并在数据库级别演示它的外观。

    联接表

    在您的域类示例中,您描述了一个联接表,用于在EmployeeCostCenter之间创建多对多关系。联接表应具有两列,并且只有两列:
  • 外键(“我”域类)
  • 另一个域类的外键。

  • 因此,您的employee_cost_center表应具有employee_idcost_center_id列。如果必须显式指定联接表,请使用key而不是column
    costCenter joinTable: 'employee_cost_center', key: 'employee_id'
    employees joinTable: 'employee_cost_center', key: 'cost_center_id'
    

    属于

    您的Employee属于CostCenter,因此:
    static belongsTo = [CostCenter ]
    

    也许这是一个错字,但是如果您没有定义反向引用,则应当将belongsTo定义为简单的类,如下所示:
    static belongsTo = CostCenter
    

    我从来没有这样使用过belongsTo,所以我不知道它在数据库中是什么样子。但是请注意,如果您有一个反向引用,定义如下:
    static belongsTo = [costCenter: CostCenter]
    

    然后,您的employee View 必须返回cost_center列。

    关于grails - GORM映射 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540398/

    相关文章:

    grails - 如何使用createcriteria获得多个列

    grails - 在Grails中检测重定向

    Grails:使用一个 Controller 操作同时渲染两个 View

    grails - 无法执行 s2ui-覆盖布局

    hibernate - 如何获取 grails hibernate L2 缓存统计信息?

    java - Grails 4.X 可以运行哪些版本的 Java?

    oracle - 保存Grails域对象时如何选择oracle current_timestamp

    hibernate - 如何更新grails中的重复记录

    grails - 试用neo4j grails插件,但与文档不匹配

    grails - 可以使用Grails的派生属性检索域对象吗?