无法在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/