Spring Mvc Hibernate Encoding/多行导入sql

Posted

技术标签:

【中文标题】Spring Mvc Hibernate Encoding/多行导入sql【英文标题】:Spring Mvc Hibernate Encoding/Multi-line import sql 【发布时间】:2015-10-05 16:10:11 【问题描述】:

我正在研究 Spring MVC,

在项目启动时,我已将 database 设置为导入默认 sql 使用休眠配置hibernate.hbm2ddl.import_filesimport.sql 内的数据用UTF-8 编码。

控制台输出

 ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - HHH000388:
 Unsuccessful: INSERT INTO menu (id, DATE_CREATED, DATE_DELETED,
 DATE_UPDATED, TITLE_ENG, TITLE_GEO, TITLE_RUS, ENABLED, PARENT_ID,
 URL, SITE_ID, USER_ID) VALUES 

 ERROR:
 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

 ERROR:
 org.hibernate.tool.hbm2ddl.SchemaExport - HHH000388: Unsuccessful: (1,
 '2015-09-10 12:00:00', NULL, NULL, 'About Us', N'ჩვენს
 შეს�ხებ', 'About Us', b'1', NULL, '/article/view/1', 3,
 1).

【问题讨论】:

我不熟悉 import_files,但从输出我的猜测是文件中的 sql 语句跨越两行但 import_files 期望每个 sql 语句只跨越一行导致“插入...值”和“值列表”被视为两个单独的语句。看看这个帖子***.com/questions/673802/…。 【参考方案1】:

    确保您将 JDBC 驱动程序设置为使用 UTF-8:

    jdbc:mysql://dbname?useUnicode=true&characterEncoding=utf-8

    persistence.xml,设置休眠连接字符集:

    <property name="hibernate.connection.charSet" value="UTF-8"/>

如果您的resources/import.sql 文件是多行的,请添加:

<property 
  name="hibernate.hbm2ddl.import_files_sql_extractor"
  value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" 
/>

或者对于 Spring Boot,在 application.properties:

spring.jpa.properties.hibernate.connection.charSet=UTF-8
spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor

【讨论】:

最佳答案发现问题出在多行和编码上,干得好伙计!

以上是关于Spring Mvc Hibernate Encoding/多行导入sql的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc+spring + hibernate 整合

Hibernate - Spring Security - Spring MVC 版本

spring 4 mvc + Hibernate + Annotations 配置堆内存问题

Spring+Spring MVC+Hibernate框架搭建实例

Spring MVC + Hibernate 4 + Spring Security

使用 Spring Boot + Hibernate + MySql 运行 MVC 应用程序