获取“org.h2.jdbc.JdbcSQLException:找不到表“BOOK_PUBLISHERS”;SQL 语句:”
Posted
技术标签:
【中文标题】获取“org.h2.jdbc.JdbcSQLException:找不到表“BOOK_PUBLISHERS”;SQL 语句:”【英文标题】:Getting "org.h2.jdbc.JdbcSQLException: Table "BOOK_PUBLISHERS" not found; SQL statement:" 【发布时间】:2016-12-06 21:29:56 【问题描述】:使用 Spring Boot、Spring Data JPA 和 H2 内存数据库来映射多对多关系。
我有两张表,其中包含实体 Book & Publisher。他们的多对多关系在哪里发货
创建连接表以将Book_Id
和Publisher_id
作为外键存储在book_publisher
表中,如下所示。
create table book_publisher
(
book_id number not null,
publisher_id number not null,
PRIMARY KEY (book_id, publisher_id),
CONSTRAINT fk_bookpublisher_book FOREIGN KEY (book_id) REFERENCES CURRENCY (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_bookpublisher_publisher FOREIGN KEY (publisher_id) REFERENCES VENUE (id) ON DELETE CASCADE ON UPDATE CASCADE
);
我没有为book_publisher
表编写域类。
但我得到了:
org.h2.jdbc.JdbcSQLException:找不到表“BOOK_PUBLISHERS”; SQL 语句:插入 book_publisher (book_id, publisher_ID) 值 (?, ?) [42102-191] "同时存储书籍对象(书籍类有 发布者对象作为“SET”变量
如何解决这个错误?
【问题讨论】:
【参考方案1】:如果您正在运行您提到的创建脚本,它将在表 CURRENCY 和 VENUE 之间创建多对多关系。所以我会说你分享的代码 sn-p 是错误的,这可能是表 BOOK_PUBLISHER 没有成功创建的原因。
创建 many_to_many 关系(在表 BOOK 和 PUBLISHER 之间)的正确 SQL 代码应该是:
create table book_publisher
(
book_id number not null,
publisher_id number not null,
PRIMARY KEY (book_id, publisher_id),
CONSTRAINT fk_bookpublisher_book FOREIGN KEY (book_id) REFERENCES BOOK (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_bookpublisher_publisher FOREIGN KEY (publisher_id) REFERENCES PUBLISHER (id) ON DELETE CASCADE ON UPDATE CASCADE
);
【讨论】:
我刚刚根据您的评论更改了脚本。我仍然得到同样的例外。现在创建了名为“BOOK_PUBLISHER”的表,但应用程序仍然不会通过抛出错误将记录插入到该“BOOK_PUBLISHER”中。 @SatishKonda 请分享新的错误堆栈跟踪。它不能包含相同的异常。您的第一个例外是表 BOOK_PUBLISHER 不存在以上是关于获取“org.h2.jdbc.JdbcSQLException:找不到表“BOOK_PUBLISHERS”;SQL 语句:”的主要内容,如果未能解决你的问题,请参考以下文章