Идентификатор и версия Grails db-reverse-engineering - PullRequest
0 голосов
/ 15 марта 2011

Я все еще новичок в Grails и Hibernate, поэтому, если вы ответите, имейте в виду, что я использовал IDE только в течение 5 дней. У меня есть база данных MYSQL, к которой я пытаюсь подключиться. Я установил обновление БД, как мне потребуется позже. Затем я запускаю плагин db-reverse-engineer, и он автоматически генерирует отличные файлы в STS для всех таблиц. Когда я смотрю на файлы, я замечаю в файле статическое отображение. Я протестировал одну таблицу и создал ее контроллер, чтобы показать все записи. Это бежало отлично. Когда я посмотрел на структуру таблицы, я создал 2 новых столбца «id» и «version». Итак, я заметил, что статическое отображение выглядит так:

class TopTen {

  Integer ttMlId
  Integer ttWeekId
  Integer ttAmount
  Integer ttRank

  static mapping = {
    id column: "tt_id"
    version false
  }
}

Когда я их удаляю, это вообще не работает. Я могу понять вторую строку, но не знаю, почему она создаст новый столбец в БД, и я не понимаю, что это за версия или почему она помещает ее туда при обратном проектировании.

Вот таблица БД в базе данных MySQL версии 5.0.51

DROP TABLE IF EXISTS `top_ten`;
CREATE TABLE `top_ten` (
`tt_id` int(10) unsigned NOT NULL auto_increment,
`tt_ml_id` int(10) unsigned NOT NULL default '0',
`tt_week_id` int(10) unsigned NOT NULL default '601',
`tt_amount` int(10) unsigned NOT NULL default '0',
`tt_rank` int(10) unsigned NOT NULL default '0',
PRIMARY KEY  (`tt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=511 DEFAULT CHARSET=latin1;

1 Ответ

3 голосов
/ 15 марта 2011

Hibernate может использовать оптимистическую блокировку, и по умолчанию она включена для всех классов домена GORM. Но если у вас нет столбца для использования в устаревшей таблице или если вы хотите явно отключить его по какой-либо причине, вы можете добавить version false к блоку отображения, и он не будет активным.

Оптимистическая блокировка реализуется путем сравнения версии, которую вы редактируете, с текущей версией в тот момент, когда обновляется строка, и, если имеется несоответствие, предполагается, что когда вы читали строку, которую нужно отобразить, было изменение другого пользователя. форма редактирования и когда вы отправили обновленные данные. Он называется оптимистичным, поскольку здесь нет явной блокировки, которая безопаснее, но дороже, и есть надежда, что два пользователя не будут редактировать одну и ту же строку одновременно.

Если вы видите новый столбец 'id' в базе данных с этим блоком отображения, что-то не так. Это должно сказать GORM, что столбец первичного ключа имеет нестандартное имя столбца 'ttx_id' и использовать его вместо столбца 'id', который он обычно использует. Создайте отчет об ошибке в http://jira.codehaus.org/browse/GRAILSPLUGINS в компоненте Grails-Reverse-Engineer и включите текущую таблицу базы данных SQL и содержимое сгенерированного класса домена, и я посмотрю.

...