gpt4 book ai didi

mysql - Grails.Domain 类。属于。为什么?

转载 作者:行者123 更新时间:2023-11-29 05:44:01 25 4
gpt4 key购买 nike

现在,我尝试了解 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 步上有不同的域类。 即,方法 belongsTo 不会影响表的结构?

第 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 个示例,我们可以得出结论,方法 belongsTo 不会影响表的结构...但是,但是,但是..看这一步

第 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$$

在这个例子中,belongsTo 影响了表的结构,所以 belongsTo 是什么???

最佳答案

根据 grails 文档,belongsTo 指示操作如何级联。这不一定会在数据库中设置级联,但会影响 GORM 中 save()delete() 操作的行为。

所以这就回答了为什么 STEP2 和 STEP3 之间的 SQL 完全没有区别。

在第 5 步中,您反转了关系的方向,因此 Main 不再知道 Sub

关于mysql - Grails.Domain 类。属于。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4285153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com