在Grails中映射两个域类

在Grails中映射两个域类,grails,orm,gorm,hibernate-mapping,grails-domain-class,Grails,Orm,Gorm,Hibernate Mapping,Grails Domain Class,我的数据库中有两个表需要映射。第一个是学生表。它看起来像这样: id first_name last_name major_code_1 major_code_2 id description 而主要表如下所示: id first_name last_name major_code_1 major_code_2 id description 我需要映射学生的专业代码,其中major\u code\u 1和major\u code\u 2指向专业表中的id。我怎么能这样做?谢谢 代码可以是

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

id
first_name
last_name
major_code_1
major_code_2
id
description
主要表如下所示:

id
first_name
last_name
major_code_1
major_code_2
id
description
我需要映射学生的专业代码,其中
major\u code\u 1
major\u code\u 2
指向专业表中的
id
。我怎么能这样做?谢谢

代码可以是这样的(一对多关系:专业可以有很多学生):

但是你能给我解释一下这两张桌子的想法吗。因为它看起来像是主要实体之间的多对多递归关系,称为Student。我想知道你是否不应该在专业表中有学生代码1和学生代码2

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

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

代码可以如下所示(具有一对多关系:专业可以有许多学生):

但是你能给我解释一下这两张桌子的想法吗。因为它看起来像是主要实体之间的多对多递归关系,称为Student。我想知道你是否不应该在专业表中有学生代码1和学生代码2

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

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


下面是一个映射到您的模式的简单模型:

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'
    }
}

由于您在问题中没有指定级联行为,因此我省略了所有
项和其他所有权字段。

下面是一个简单的模型,它映射到您的模式:

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
和其他所有权字段,因为您在问题中没有指定级联行为。

基本上,学生对象可以有两个专业…major1,major2。在数据库中,student表中的major_code_1和major_code_2只是一个指向major表的代码。从那里你可以得到大学的主要描述(计算机信息科学,经济学等),这是一个遗留数据库,所以如果它不能很好地映射到Grails域类,那就是原因。现在我明白了。因此,我的答案中的代码应该可以正常工作。您只能添加一个约束is Student类,以避免一个学生有两个相同的专业。如果该学生在拥有方,这是否需要改变一点?我添加了多对一关系的解决方案。因此,现在学生在拥有方。第一种方法,如果你放弃一个专业,所有的学生都将消失,第二种方法,如果你放弃一个学生,相应的专业将消失。基本上,学生对象可以有两个专业…major1,major2。在数据库中,student表中的major_code_1和major_code_2只是一个指向major表的代码。从那里你可以得到大学的主要描述(计算机信息科学,经济学等),这是一个遗留数据库,所以如果它不能很好地映射到Grails域类,那就是原因。现在我明白了。因此,我的答案中的代码应该可以正常工作。您只能添加一个约束is Student类,以避免一个学生有两个相同的专业。如果该学生在拥有方,这是否需要改变一点?我添加了多对一关系的解决方案。因此,现在学生站在拥有的一边。第一种方法,如果你放弃一个专业,你所有的学生都将离开,第二种方法,如果你放弃一个学生,相应的专业将离开。