У меня есть готовая схема таблицы базы данных, и мне нужно использовать ее в приложении Grails.Графическое сопоставление доменных классов Grails в отношениях один к одному
Мои таблицы в PostgreSQL:
CREATE TABLE "user" (
id serial NOT NULL,
login character varying(32) NOT NULL,
password character varying(32) NOT NULL,
email character varying(255) NOT NULL,
date_created time with time zone NOT NULL DEFAULT now(),
last_updated time with time zone NOT NULL DEFAULT now(),
is_banned boolean DEFAULT false,
CONSTRAINT "PK_user_id" PRIMARY KEY (id),
CONSTRAINT "UN_user_email" UNIQUE (email),
CONSTRAINT "UN_user_login" UNIQUE (login)
)
CREATE TABLE profile (
"user" integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass),
first_name character varying(25) NOT NULL,
middle_name character varying(25) NOT NULL,
last_name character varying(25) NOT NULL,
address integer,
CONSTRAINT "PK_PROFILE_user" PRIMARY KEY ("user"),
CONSTRAINT "FK_PROFILE_user_USER_id" FOREIGN KEY ("user")
REFERENCES "user" (id) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE CASCADE
)
Как вы можете видеть, «профиль» таблица имеет первичный ключ, который является его внешний ключ тоже. Это основная «особенность», с которой возникают проблемы с отображением карт.
Моя реализация таблиц отображения на классы Grails домена:
class User {
...
static hasOne = [profile : Profile];
...
}
class Profile {
...
User user;
...
static mapping = {
id name: 'user'
version false
address column: 'address'
user column: '`user`'
};
...
}
Этот класс отображения аварии с исключением:
Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: ru.redlisa.model.User, at table: profile, for columns: [org.hibernate.mapping.Column(user)]
Как правильно картировать таблицы в Grails домена классов?
Как получить интерфейс взаимодействия?
так:
User user = new User();
user.addToProdile(new Profile());
Или
new User(profile: new Profile()).save();
А как насчет класса Profile? Должен ли я оставаться таким же? – ArtLab