Grails docs препятствует использованию составных первичных ключей, но в this video (26:00 - 29:00) @BurtBeckwith использует составные первичные ключи, поскольку он говорит о преимуществах производительности сопоставления таблиц объединений классам домена, а не использования коллекций. Это вызывает несколько вопросов:Должен ли я использовать составные первичные ключи в Grails?
- Почему Grails docs препятствует использованию составных первичных ключей?
- Почему Берт даже использует сложный ключ? Я пробовал без одного, и все, кажется, работает нормально. Я также не переопределял
hashcode
илиequals
. - Берт использовал Grails 1.3, когда это видео было сделано, относятся ли его проблемы с производительностью относительно коллекций? Я могу проверить это самостоятельно, включив ведение журнала SQL, но я еще не сделал этого.
Сохраняет таблицу 'UserRole' так же, как и неявно созданная таблица соединений? Если вы не используете составной PK в таблице соединений, каждая запись в этой таблице будет иметь «id» и «версию».Я не вижу в этом большой откат, поэтому мне трудно понять, почему мы пошли бы на дополнительные усилия по созданию сложного ключа. Я также смущен при сравнении SQL, сгенерированного двумя подходами (сопоставление таблицы соединений с составным ключом и сопоставление таблицы соединений без составного ключа). SQL для композитного подхода PK кажется более сложным. Я могу опубликовать его, если вы захотите. – ubiquibacon
Это не очень важно, но работа была выполнена и теперь инкапсулирована в скрипт, который генерирует классы домена. Но важно не слишком зависеть от реализаций по умолчанию - плагин и Spring Security не заботятся о том, откуда берутся данные пользователя и роли, только в какой-то момент он находится в правильном формате. Не стесняйтесь использовать любой подход, который вы хотите, используйте пользовательский 'UserDetailsService' и т. Д. –