mysql - 点燃和参考表
问题描述
假设我在 MySQL 中有 3 个表。表 A、B 和 C。
表 A 是:
CREATE TABLE `table_a` (
`a_id` bigint(20) NOT NULL AUTO_INCREMENT,
`a_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`a_id`)
);
表 B 是:
CREATE TABLE `table_b` (
`b_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`b_name` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`b_id`)
);
表A
和B
具有多对多关系,因此表C
将作为它们的参考表,其中包含表的主键A
和B
.
CREATE TABLE `table_c` (
`a_id` BIGINT(20) NOT NULL,
`b_id` BIGINT(20) NOT NULL,
PRIMARY KEY (`a_id`,`b_id`)
);
使用 Hibernate 时,这种架构没有问题,因为我可以将@JoinTable
注解与@ManyToMany
注解结合使用。Hibernate 根据第一列和第二列的组合来处理唯一性。
但是,当我尝试使用 web-console 配置集群时,ignite 不允许我对表进行插入,C
因为在其中一列中,该值已经存在,而当它应该像在确定唯一性的休眠时一样通过两列的组合。
谁能告诉我应该如何为这些表配置缓存?
谢谢!
更新!:
我认为这个问题已经神秘地解决了,但是当我将日志记录设置为详细时,对引用表(复合键)的插入仍然失败。
Ignite 只允许我的应用程序继续,因为我已经设置了 write behind 启用。但我所做的更改并没有真正保留在我的 MySql 持久存储中。
经过一番调查,我发现 Ignite 正在为复合键生成错误的插入查询。
INSERT INTO table_c (a_id, b_id) values (5, 5) ON DUPLICATE KEY UPDATE
此查询产生语法错误,因为查询不完整。我已经设法通过覆盖 Ignite 的 MySqlDialect 并检查updPart变量来解决此问题,以在变量为空时生成正确的语法。
我还不确定这是否是 Ignite 的错误或限制。
解决方案
推荐阅读
- matlab - MATLAB 中的谢尔宾斯基三角形
- spring-jdbc - JdbcTemplate 对多个表同时批量更新
- php - Laravel 中所有控制器的通用文件上传
- html - django使用html模板将数据插入数据库
- python - 像“The LJ Speech Dataset”这样的数据集
- python - 为了使用 Python 从 Rust 程序内部调用函数,最佳实践是什么?
- verilog - JK 触发器状态图实现的错误输出
- kubernetes - 如何查看上下文的完整详细信息(如令牌)
- java - 无法获取端口上的服务详细信息?
- c# - 无法在 IIS 服务器和客户端上启动 Web 应用程序