在Grails中映射两个域类

时间:2013-07-16 13:08:31

标签: grails orm gorm hibernate-mapping grails-domain-class

我的数据库中有两个需要映射的表。第一个是学生表。它看起来像这样:

id
first_name
last_name
major_code_1
major_code_2

Major 表格如下:

id
description

我需要映射学生的主要代码,其中major_code_1major_code_2指向主要表格中的id。我怎么能这样做?谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个映射到您的架构的简单模型:

class Student {
    String firstName
    String lastName
    Major firstMajor
    Major secondMajor

    static mapping = {
        table 'Student'
        firstMajor column: 'major_code_1'
        secondMajor column: 'major_code_2'
    }
}

class Major {
    String description

    static mapping = {
        table 'Major'
    }
}

我遗漏了所有belongsTo和其他所有权字段,因为您未在问题中指定级联行为。

答案 1 :(得分:0)

代码看起来像(一对多的关系:Major可以有很多学生):

class Student{

    Long id 
    String first_name
    String last_name

    static belongsTo = [
            major_code_1: Major
            , major_code_2: Major
    ]

    static mapping = {
        table 'Student'
    }

}


class Major{

    Long id 
    String description

    static hasMany = [
        student_1: Student
        , student_2: Student
    ]

    static mappedBy = [
            student_1: 'major_code_1'
            , student_2: 'major_code_2'
    ]

    static mapping = {
        table 'Major'
    }

}

但是,请你解释一下这两张桌子的想法。因为在名为Student的Major Entity之间看起来像很多很多的递归关系。我想知道你不应该在Major表中有student_code_1和student_code_2。

--------------------------------编辑-------------- ----------------------------------

具有多对一的关系(许多学生具有相同的专业)

class Student{

    Long id 
    String first_name
    String last_name

    Major major_code_1
    Major major_code_2

    static mapping = {
        table 'Student'
    }

}


class Major{

    Long id 
    String description

    static belongsTo = [
        student_1: Student
        , student_2: Student
    ]

    static mappedBy = [
            student_1: 'major_code_1'
            , student_2: 'major_code_2'
    ]

    static mapping = {
        table 'Major'
    }

}