假设我在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变量,以便在变量为空时生成正确的语法。
我还不确定这是一个错误或点火限制。
暂无答案!
目前还没有任何答案,快来回答吧!