首页 > 解决方案 > 点燃和参考表

问题描述

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

AB具有多对多关系,因此表C将作为它们的参考表,其中包含表的主键AB.

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 的错误或限制。

标签: mysqlhibernateignite

解决方案


推荐阅读