сопоставить существующую базу данных MySQL с Gorm - PullRequest
9 голосов
/ 30 декабря 2011

Я пытаюсь отобразить (небольшую часть) базу данных Joomla MySQL, используя GORM с Grails 2.0.

Я читаю книгу об аргументах (Grails) и гуглю веб для технической статьи, но мне все еще нужна хорошая ссылка для сопоставления типов Groovy / Java с полями MySQL.

Я начинаю с простой таблицы jos_bannerclient.

class BannerClient {
    String name
    String contact
    String email
    String notes
    String editor = ''

    static constraints = {
        name(blank:false)
        contact(nullable:true)
        email(nullable:true)
        notes(nullable:true)
        editor(nullable:true)
    }

    static mapping = {
        datasource 'joomla'
        table 'jos_bannerclient'
        id column:'cid', type:'int'
        notes column:'extrainfo', type:'text'
        version false
    }
}

В этот момент запись генерируется в базе данных, но если я сохраню домен с failOnError:true, я получу эту ошибку: java.lang.IllegalArgumentException.

У меня проблемы с отображением поля checked_out TINYINT. Единственное, что GORM может проверить это поле - это объявить его как Boolean, почему оно не работает с Byte?

У меня также есть некоторые сомнения относительно того, как отобразить поле MySQL TIME, например checked_out_time.

Я также прочитал некоторую часть документации Hibernate, но все еще не получил необходимые знания для выполнения этой задачи!

Кто-нибудь может помочь, пожалуйста?

1 Ответ

2 голосов
/ 17 сентября 2014

Вы указываете «тип», но должны указывать «sqlType», поэтому я считаю, что у вас проблемы с TINYINT и вам необходимо использовать логическое значение вместо байта. Id по умолчанию является int (ну, на самом деле, bigint), но он не будет жаловаться вам на это, если вы не используете dbCreate = "validate", а другие значения не являются строками, что не обязательно создаст проблему с совместимостью для заметки.

static mapping = {
    datasource 'joomla'
    table 'jos_bannerclient'
    id column:'cid', sqlType:'int'
    notes column:'extrainfo', sqlType:'text'
    version false
}

Что касается проблемы с TIME, мне удалось без проблем указать тип TIMESTAMP, поэтому я могу представить, что TIME также будет работать нормально. Все типы SQL должны поддерживаться. Например:

static mapping = {
  dateCreated sqlType: 'TIMESTAMP', defaultValue: 'CURRENT_TIMESTAMP'
}
...