Доступ к БД без доменных классов с Grails - PullRequest
4 голосов
/ 09 декабря 2010

Я столкнулся с проблемой при попытке собрать приложение Grails с базой данных AS400 / DB2. Я не могу отобразить большинство файлов, потому что у них нет уникального поля для использования в качестве идентификатора. И даже если они это делают, они являются текстовым полем, а не в формате, который можно преобразовать в длинный тип. (Я не понимаю, почему PK должен быть длинным типом данных? Если вы хотите, чтобы у нас была последовательность или ИИ для ПК, это имело бы смысл, но что, если вам просто нужен уникальный ключ?

Мне интересно, возможно ли сохранить источник данных, который я настроил, и просто использовать его для прямого доступа SQL к БД без использования доменных объектов?

Что-то, что я видел, устанавливало объект домена как временный. Но я не знаю, можете ли вы сделать что-то подобное без поля идентификатора. Кто-нибудь знает, как это работает?

Есть идеи?

Спасибо, Jon

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Вы можете получить доступ к базе данных довольно легко, в некоторых случаях мы делаем то же самое из соображений производительности:

class SomeService {
    def dataSource;

    def nativeAccessMethod = {
        def sql = new Sql(dataSource);
        def rows = sql.rows("select * from myTable");
        /* processing continues ...*/
    }
}

Поддержка Groovy нативным SQL также хороша.

3 голосов
/ 09 декабря 2010

Нет необходимости, чтобы первичный ключ был длинным, это просто стандарт для Hibernate и Grails.Вы можете рассматривать столбец varchar, который является уникальным, как первичный ключ с классом домена, например:

class Person {

   String username
   String firstName
   String lastName

   static mapping = {
      id name: 'username', generator: 'assigned'
      version false
   }
}

Это работает для таблицы, определенной этим DDL:

create table person (
   username varchar(255) not null,
   first_name varchar(255) not null,
   last_name varchar(255) not null,
   primary key (username)
);

Я добавил 'version false ', поскольку это устаревшая система, и у вас, вероятно, нет столбца оптимистической блокировки' version '.

...