Синтаксис Grails для объединения таблиц по составному внешнему ключу - PullRequest
0 голосов
/ 15 сентября 2011

Может кто-нибудь сказать, как объединить таблицы в Grails?Мне нужна помощь с синтаксисом.

Допустим, у меня есть три таблицы, и у них нет каких-либо явно определенных ограничений внешнего ключа:


  EMPLOYEE:
  empid
  name
  emp_deptid
  emp_teamid
  title
  salary
  hiredate
 

  DEPT:
  dept_deptid
  deptname
  location
  size
  numOfTeams
 

  TEAM:
  team_teamid
  teamname
  team_deptid
  responsibility
  size
  

Я хочуПрисоединяйтесь к РАБОТНИКУ и КОМАНДЕ на TEAMID и DEPTID.Я знаю, как объединить таблицы в запросе SQL.На самом деле я хотел бы знать, как выполнять объединения таблиц в Grails (для этих выбранных столбцов с помощью OnetoOne, OnetoMany, hasMapped и т. Д.).спасибо

редактировать:

Class Emp(){

String empid
String teamid
String deptid
.....
.....
Date   hiredate

Team   team

static mapping = {
    ....
            .... 
    deptid column:'emp_deptid'
    teamid column:'emp_teamid'
    .....
            .....
    team column: ['teamid', 'deptid']
 }


}


Class Team(){
...
...
String teamid
String deptid

static mapping ={
...
deptid column:'team_deptid'
teamid column:'team_teamid'
....
}
}

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

В разделе GORM doc, разделах 5.4.1 и 5.4.2 , есть 2 подраздела, оба из которых называются «Запрос ассоциаций».

редактирование:

Внезапно это не так просто - извините за невнимательность.

Grails официально поддерживает синтаксис только для составных первичных ключей , но не для внешних. В Grails я обнаружил несколько проблем с составными внешними ключами: GRAILS-4606 и GRAILS-4256 .

Я могу предложить подходы, которые могли бы работать, но я не проверял это сам.

Синтаксис «список столбцов» (образец взят из GRAILS-4256):

class Employee {
  Team team
  static mapping = {
     // ... column mapping
     team column: [team_id, dept_id]
  }
}

Лауро Беккер использовал пользовательский класс конфигурации , который добавляет синтаксис составного сопоставления внешнего ключа - это, похоже, сработало для него.

Некоторые люди даже создают обновляемые представления базы данных с помощью одного ключевого поля и сопоставляют домен с ними, а не с исходными таблицами - но я считаю, что это излишество.

0 голосов
/ 15 сентября 2011

Есть много способов сделать запрос и присоединиться к Grails. Вот один пример простого способа сделать SQL-соединение двух таблиц:

class Dept {
    ...
}

class Team {
    ...
    Dept dept
}

Team.list(fetch: [dept: 'eager'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...