Grails - Использование поля VARCHAR2 в качестве идентификатора таблицы - сбой связи с внешним ключом - PullRequest
1 голос
/ 02 февраля 2011

Я интегрирован с устаревшей базой данных Oracle, которая использует назначенные значения VARCHAR2 для первичных ключей.Я создаю отношения один ко многим с этой существующей таблицей.Устаревшая таблица называется Приложения (которую я не могу изменить), а новая таблица называется Проекты.Многие проекты могут быть назначены одному приложению.

Когда GORM создает таблицу Project, он создает столбец NUMBER для внешнего ключа application_id, даже если это поле VARCHAR2 в таблице Applications.

class Application {
   static hasMany = [projects : Project];  // does not fix problem
   String application_id; 
   ...
   static mapping = {
      table 'applications'
      version false
      id (column:'application_id')
   }
   static constraints = {
      application_id(maxSize:16,blank:false,unique:true,type:"string",generator:"assigned")
   }
   ...
}

class Project {
   Application application;
   ...
}

Когда я компилирую приложение, я получаю следующие предупреждения: Неудачно: изменить таблицу проекта добавить ограничение FKED904B1956694CB5 Внешний ключ (application_id) ORA-02267: тип столбца несовместим со ссылочным типом столбца

Когда я запускаюприложение и нажмите на контроллер приложений Я получаю эту ошибку: состояние SQL [99999];код ошибки [17059];Не удалось преобразовать во внутреннее представление;вложенное исключение: java.sql.SQLException: не удалось преобразовать во внутреннее представление

Когда я нажимаю на Project |создать Я получаю эту ошибку: не удалось преобразовать во внутреннее представление;Вложенное исключение - java.sql.SQLException: не удалось преобразовать во внутреннее представление в / project / create: 172

Итак, как я могу установить класс Project для ожидания внешнего ключа VARCHAR2 для приложения?

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Посмотрите на этот сайт . Может быть, это поможет вам.

0 голосов
/ 03 февраля 2011

Вот исправление в классе Application ... в случае, если кто-то еще ищет это:

class Application {
   static hasMany = [projects : Project];  
   String application_id; 
   String id                  // <--- part of solution

   static mapping = {
      id column:'application_id',generator:'assigned'  // <--- part of solution
   }

   static constraints = {
      application_id(maxSize:16,blank:false,unique:true)  // <--- part of solution
      columns {                                           // <--- part of solution  
                id type:'text'
                application_id type:'text'
              }
   }
...