Теперь я пытаюсь понять, как работает в классе домена Grails и GORM.
Итак, я пробую эксперименты:
Я экспериментирую с двумя классами доменов: Main и Sub.
Пошли!
ШАГ 1:
class Main {
String name;
String value;
}
class Sub {
String name;
String value;
}
Смотри MySQL:
CREATE TABLE `main` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `sub` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
РЕЗУЛЬТАТ: Ожидаемый. Все хорошо.
ШАГ 2:
class Main {
String name;
String value;
Sub sub;
}
class Sub {
String name;
String value;
}
Смотри MySQL:
CREATE TABLE `main` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`sub_id` bigint(20) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK3305B98FB5DA4E` (`sub_id`),
CONSTRAINT `FK3305B98FB5DA4E` FOREIGN KEY (`sub_id`) REFERENCES `sub` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `sub` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
РЕЗУЛЬТАТ: Ожидаемый. Все мило. С точки зрения MySQL мы имеем однонаправленное отношение 1: 1. главная-к-саб. Да?
ШАГ 3:
class Main {
String name;
String value;
Sub sub;
}
class Sub {
String name;
String value;
static belongsTo = Main
}
Смотри MySQL:
CREATE TABLE `main` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`sub_id` bigint(20) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK3305B98FB5DA4E` (`sub_id`),
CONSTRAINT `FK3305B98FB5DA4E` FOREIGN KEY (`sub_id`) REFERENCES `sub` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `sub` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
РЕЗУЛЬТАТ: С точки зрения MySQL мы имеем однонаправленное отношение 1: 1. главная-к-саб. Да?
но это то же самое, что на ШАГЕ 2. но у нас есть разные классы домена на ШАГЕ 2 и на ШАГЕ 3.
т.е. метод принадлежит не влияет на структуру таблицы?
ШАГ 4:
class Main {
String name;
String value;
Sub sub;
}
class Sub {
String name;
String value;
static belongsTo = [main:Main]
}
Смотри MySQL:
CREATE TABLE `main` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`sub_id` bigint(20) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK3305B98FB5DA4E` (`sub_id`),
CONSTRAINT `FK3305B98FB5DA4E` FOREIGN KEY (`sub_id`) REFERENCES `sub` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `sub` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
РЕЗУЛЬТАТ: С точки зрения MySQL мы имеем однонаправленное отношение 1: 1. главная-к-саб. Да?
но это то же самое, что и на ШАГЕ 2 и 3. Но у нас есть другой класс домена на ШАГЕ 2 и на ШАГЕ 3 и на ШАГЕ 4.
Посмотрите на 3 самых последних примера, мы можем заключить, что метод ownTo не влияет на структуру таблицы ... но, но, но .. посмотрите на этот ШАГ
ШАГ 5:
class Main {
String name;
String value;
}
class Sub {
String name;
String value;
static belongsTo = [main:Main]
}
Смотри MySQL:
CREATE TABLE `main` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `sub` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`main_id` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK1BE407E56D06` (`main_id`),
CONSTRAINT `FK1BE407E56D06` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
В этом примере, принадлежит к влияет на структуру таблицы, так что делает принадлежит принадлежит ???