在hibernate中导入import.sql不成功

Posted

技术标签:

【中文标题】在hibernate中导入import.sql不成功【英文标题】:Unsuccessful importing import.sql in hibernate 【发布时间】:2015-11-20 13:08:10 【问题描述】:

我想在每次应用程序运行时自动删除表并创建一个新表,并自动插入预定义的数据。我已经准备好import.sql 中的数据了。我已经在application.properties 中设置了spring.jpa.hibernate.ddl-auto=create-drop。但是,为什么会出现以下错误?我可以手动插入它。

2015-11-20 20:53:57.242 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: INSERT INTO gender
2015-11-20 20:53:57.242 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near '' at line 1
2015-11-20 20:53:57.242 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: (gender_id, gender_name)
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'gender_id, gender_name)' at line 1
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: VALUES
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES' at line 1
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: (1, 'Male'),
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 'Male'),' at line 1
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: (2, 'Female')
2015-11-20 20:53:57.257 ERROR 7092 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2, 'Female')' at line 1

这是我的实体:

@Entity
public class Gender 
    @Id
    @Column(name = "gender_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "gender_name")
    private String name; 

这是我在import.sql中的查询:

INSERT INTO gender 
    (gender_id, gender_name) 
VALUES 
    (1, 'Male'), 
    (2, 'Female');

【问题讨论】:

该错误表明您的查询存在问题。尝试在运行时打印您的查询并分享。 请问,在运行时打印查询是什么意思?我已经提供了我的查询,我可以手动插入它。 如果您以字符串形式提供查询,则从男性和女性中删除单引号 还是一样。是的,我在一个名为 import.sql 的文件中提供它。 重复H2 SQL Grammar Exception - 虽然是H2,但问题的原因是一样的 【参考方案1】:

根据错误的模式,您的行尾似乎包含无法处理的字符(隐藏字符,如 LF 或类似的东西)。

我这样说是因为您的所有错误都与行尾有关。尝试像这样将 import.sql 放在一行中:

INSERT INTO gender (gender_id, gender_name) VALUES (1, 'Male'), (2, 'Female');

注意关键字之间只有空格并删除所有不可打印的字符。您可以使用自己喜欢的文本编辑器并使用“显示所有字符”选项。

【讨论】:

确实如此。我需要在一行中完成所有操作。正如@Tobias Liefke 提到的链接,Hibernate 默认使用SingleLineSqlCommandExtractor,它将每一行视为单独的查询。为了可以读取import.sql 中的多行查询,请将其更改为MultipleLinesSqlCommandExtractor。如果您使用的是Spring Boot,请将spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor 添加到application.properties

以上是关于在hibernate中导入import.sql不成功的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hibernate、MySQL 应用程序中使用 import.sql 文件将默认数据插入表中

Hibernate项目环境搭建

Spring Mvc Hibernate Encoding/多行导入sql

MyEclipse中的Hibernate搭建

在 index.html 中导入 css 和在 Angular 5 中导入 styleUrls 的区别

使用maven和myeclipse配置hibernate以及基本的入门程序