GORM отношение 1-ко-многим - создано 3 таблицы, а не 2 - PullRequest
0 голосов
/ 15 ноября 2010

Все

Моя проблема в том, что я создаю отношение 1-ко-многим в GORM и ожидаю, что в качестве вспомогательных объектов будут созданы 2 таблицы базы данных.3 созданы, что делает запросы SQL чрезмерно сложными.

Я создал близкий вариант «1 ко многим» в документации GORM:

class Status {

   List errorMessage

   static hasMany = [errorMessage:ErrorMessage]
}

и класс сообщения об ошибке:

class ErrorMessage {

   String message

   static belongsTo = Status
}

Iожидал, что это создаст две таблицы базы данных:


CREATE TABLE status {
   ID NUMBER(19,0),
   VERSION NUMBER(19,0),
   //other fields
}

CREATE TABLE error_message {
   ID NUMBER(19,0),
   VERSION NUMBER(19,0),
   STATUS_ID NUMBER(19,0),
   MESSAGE VARCHAR(255)
   //other fields
}

, но на самом деле ему нужна третья таблица,



CREATE TABLE status_text {
    status_text_id NUMBER(19,0),
    text_idx NUMBER(19,0), 
    text_id NUMBER(19,0)
}

Добавление статуса в ErrorMessage (хак, поскольку я не хочу, чтобы ErrorMessageесть ссылка на Status) класс удаляет третью таблицу, но сохраняет второй внешний ключ, в результате чего дочерний объект Text имеет два поля внешнего ключа.

То, что я хочу, это просто - просто набор объектов, прикрепленных к родительскому объекту.удалится когда будет - есть мысли что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 15 ноября 2010

Я не думаю, что вы можете удовлетворить оба требования, то есть, что у вас есть каскадные удаления и нет таблицы соединений.Вам нужно belongsTo для каскадного удаления, и это делает отношения двунаправленными.Чтобы удалить объединяющую таблицу, назовите ownTo с синтаксисом Map:

class ErrorMessage {
   String message
   static belongsTo = [status: Status]
}
...