2013-07-16 2 views
0

У меня есть две таблицы в нашей базе данных, которые нужно сопоставить. Первым является стол Student. Это выглядит примерно так:Сопоставление двух классов домена в Grails

id 
first_name 
last_name 
major_code_1 
major_code_2 

И в Major таблица выглядит так:

id 
description 

Мне нужно отобразить основные коды студента, где major_code_1 и major_code_2 указывают на id в Основная таблица. Как я могу это сделать? Благодаря!

ответ

0

Код может выглядеть (с один-ко-многим отношениям: майор может иметь много студентов):

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

} 

Но не могли бы вы объяснить мне идею этих двух таблиц. Потому что это похоже на рекурсивное отношение многих к многим между Major Entity, которое называется Student. Интересно, если вы не должны иметь 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' 
    } 

} 
+0

В основном объект-ученик может иметь две специальности ... major1, major2. В базе данных major_code_1 и major_code_2 у учащегося - это всего лишь код, указывающий на основную таблицу. Оттуда вы можете получить основное описание (Computer Information Science, Economics и т. Д.) Будучи университетом, это устаревшая база данных, поэтому, если она не хорошо отображает классы домена Grails, то хорошо. – grantmcconnaughey

+0

Теперь я понимаю. Поэтому код из моего ответа должен работать нормально. Вы можете добавить ограничение только для класса Student, чтобы не иметь двух одинаковых специальностей для одного ученика. – kpater87

+0

Будет ли это немного изменяться, если Студент находится на стороне владельца? – grantmcconnaughey

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 и другие владения поля, как вы не указали каскадное поведения в вашем questi на.

+0

+1. *Простота есть основа утонченности.* – dmahapatro