ignite和参考表

bq9c1y66  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(234)

假设我在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`)
);

table 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控制台配置集群时,ignite不允许我插入表 C 因为在其中一列中,该值已经存在,而在hibernate中,唯一性是由两列的组合决定的。
有人能告诉我应该如何为这些表配置缓存吗?
谢谢!
更新!:
我原以为这个问题已经神秘地解决了,但当我将日志记录改为verbose时,对引用表(复合键)的插入仍然失败。
ignite刚刚允许我的应用程序继续,因为我已经启用了设置写后功能。但我所做的更改并不能真正在mysql持久存储中持久化。
经过一些调查,我发现ignite为复合键生成了不正确的插入查询。

INSERT INTO table_c (a_id, b_id) values (5, 5) ON DUPLICATE KEY UPDATE

由于查询不完整,此查询产生语法错误。我已经设法为这个问题创建了一个变通方法,方法是重写ignite的mysqldialect并检查updpart变量,以便在变量为空时生成正确的语法。
我还不确定这是一个错误或点火限制。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题