java - 从 jpa-hibernate ddl auto 运行 sql 脚本

标签 java sql-server hibernate jpa

无法在SO中找到解决方案,所以我试图找出如何实现这里的目标。 我有一个 SqlServer 2014 数据库,它接受并运行良好的脚本(它可以做很多事情,主要检查是否存在程序,然后删除,构建它们,运行它们并删除它们...)。

例如这个简单的语句:

SET NOCOUNT ON;

IF OBJECT_ID ( 'InitializeProc', 'P' ) IS NOT NULL
    DROP PROCEDURE InitializeProc ;  
GO  

给我:

HHH000388: Unsuccessful: IF OBJECT_ID ( 'InitializeProc', 'P' ) IS NOT NULL ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 267) Incorrect syntax near 'NULL'.

我尝试在 persistence.xml 中声明的 create ddl-auto 阶段运行我的脚本,并且 Hibernate 声明中的 sql 驱动程序是“SQLServer2012Dialect”。

我使用的是 Java 1.8 - Jboss 7 EAP 和 jpa 2.1 环境。 我已经将行尾“LF”替换为“CRLF”。 由于脚本很长,我正在尝试找出这个问题,希望这可以成为解决整个案例的关键。

我知道我可以简单地调用 Drop,但首先它很难看,其次我在其他场合(例如“AS”、“GO”等)发现了同样的问题。

谢谢!

编辑:如果我将所有语句放在一行中,则有效。但强制开发商这样做确实很丑陋。 在 persistence.xml 中也尝试过:

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

...但是:

Caused by: org.hibernate.hql.internal.antlr.SqlStatementParser$StatementParserException: line 1:129956: expecting STMT_END, found 'null'

不敢相信这么简单的事情竟然不容易完成。一定有办法的。

最佳答案

抱歉,死后发布,但我在 MultipleLinesSqlCommandExtractor 中遇到了同样的错误(期待 STMT_END,发现“null”)并找到了解决它的方法 - 最后一条语句应该以 ; 结尾任何类型的分隔符或注释均无异常(exception)。

似乎是 5.3.1.Final 的错误

关于java - 从 jpa-hibernate ddl auto 运行 sql 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502771/

相关文章:

java - mongo 存储库中的 collection.update 查询 - spring mongo

sql - 如何避免隐式类型转换

java - org.hibernate.hql.internal.ast.ErrorCounter : unexpected token: (

hibernate - Hibernate 中的自引用一对一映射

java - 将多个任意注释合并为一个

java - 如何使用 Spring Data 删除 MongoDB 中的记录

java - 支柱 2 : parameters between Actions

java - JEdi​​tor 没有像 Firefox 的 IE 那样显示 HTML 页面..?

sql-server - SSRS - 自定义参数布局已从报告中删除

sql - 多表插入与合并?