По умолчанию GORM использует модель таблицы на иерархию для классов домена с наследованием.Все поля в родительском классе и все поля в каждом подклассе будут храниться в одной таблице.
Если вы хотите отключить эту функцию, вы можете использовать параметр отображения tablePerHierarchy.Если для этого параметра установлено значение false, поля родительского класса будут помещены в общую родительскую таблицу, а поля для каждого подкласса - в свою собственную таблицу.Это может сделать ваши запросы немного менее эффективными, потому что запросы будут иметь объединения, но если дерево наследования невелико, разница должна быть незначительной.Вот как это будет выглядеть с вашим классом домена:
package com.HospitalManagement
class Physician extends User {
static constraints = {
}
String specilty;
String MobileNo;
String Physician_Address;
String clinicals;
static mapping = {
tablePerHierarchy false
}
}
См. Документацию Grails для получения дополнительной информации:
Если вы хотите, чтобы у каждого подкласса была своя собственная таблица, содержащая все поля из родительского класса и все поля из подкласса, то вы можете определить родительскийКласс как «абстрактный», и это должно помешать Grails сделать отдельную таблицу для него.Grails должен создавать таблицы только для конкретных классов домена, а не для абстрактных классов домена.[ Источник ]
Ваш пользовательский класс будет выглядеть примерно так:
abstract class User {
String username
String password
//etc...
}
Это будет правильно составлять таблицы, хотя я не уверен, какой эффектэто может иметь место в Spring Security.Если после абстракции класса User вы увидите какие-либо ошибки Spring Security, я вернусь к отключению таблицы на иерархию и работе с объединениями.