【发布时间】:2022-12-21 09:41:27
【问题描述】:
假设我有:
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=truelogging.level.org.hibernate.SQL=DEBUG
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=create# Show or not log for each sql query
spring.jpa.show-sql = truespring.jpa.generate-ddl=true
spring.jpa.defer-datasource-initialization=true
我的脚本是data.sql:
INSERT INTO ITEMS(ITEM_ID, value) VALUES(1, 'EXAMPLE');
第二个脚本schema.sql:
create table items
(
item_id int not null auto_increment,
value varchar(50) not null,
primary key (item_id)
);
问题是当我在运行项目时使用这些配置自动填充时,我遇到了完整的stacktrace 中的问题:
https://gist.github.com/invzbl3/abe68fe95c69b3a81699a2ed08375853#file-stacktrace-L111
有人可以告诉我,我在这里遗漏了什么吗?
任何聪明的想法在这里都会有所帮助。
如果我手动运行它,我没有任何问题,但是在运行项目以自动填充时,我遇到了堆栈跟踪中的问题。
更新:
我已经尝试过这个,例如:
-
https://stackoverflow.com/a/66333222/8370915
通过更改实体而不是此变体:
@Entity @Table(name = "ITEMS") public class Item { @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long id; private String value; }另一个是:
@Entity @Table(name = "`ITEMS`") public class Item { @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long id; private String value; }结果我有: https://gist.github.com/invzbl3/83f00b9ca8d536052ac3174f7f9ddf47#file-stacktrace-L111
通过更改
sql脚本:代替:
INSERT INTO ITEMS(item_id, value) VALUES (1, 'EXAMPLE');到:
INSERT INTO ITEMS(item_id, value) VALUES (1, '`EXAMPLE`');结果我收到:https://gist.github.com/invzbl3/ae873cf7aaeeccfedff2dc5c8f543773#file-stacktrace-2-L111
【问题讨论】:
-
VALUE是 SQL 的保留字,是 H2 中的关键字,您需要将其引用为"VALUE"或"value"(或 MySQL 样式的 `value`)。 -
@EvgenijRyazanov,非常感谢您指出!稍后我将在这里分享新的调查和更新。感谢您花时间检查它。这对我有很大帮助。