Java 通过eclipseLink生成sql时出现问题-缺少分隔符

Java 通过eclipseLink生成sql时出现问题-缺少分隔符,java,sql,jpa,eclipselink,persistence.xml,Java,Sql,Jpa,Eclipselink,Persistence.xml,我正在使用eclipseLink和jpa。 在persistence.xml中,我定义生成一个create.sql文件。将生成该文件,但缺少“;”-每个sql语句的分隔符 是否可以在persistence.xml中定义分隔符,或者以其他方式定义分隔符 示例persistence.xml: <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <exclude-unlisted-cl

我正在使用eclipseLink和jpa。 在persistence.xml中,我定义生成一个create.sql文件。将生成该文件,但缺少“;”-每个sql语句的分隔符

是否可以在persistence.xml中定义分隔符,或者以其他方式定义分隔符

示例persistence.xml:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

<exclude-unlisted-classes>false</exclude-unlisted-classes>

<class>de.company.project.models.User</class>

<properties>
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
      <property name="eclipselink.application-location" value="/sql" />
      <property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/>
      <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql"/>
      <property name="eclipselink.ddl-generation.output-mode" value="sql-script"/>
</properties>

如果是一次性的,请将每个“\n\n”替换为“;\n\n”。但我不建议将此作为永久解决方案

用于分隔语句的标记取决于所使用的数据库平台。 我假设您使用的是Oracle,因为从代码来看,它似乎是唯一一个不使用分隔符的,尽管我不知道为什么

您正在使用什么工具来执行脚本?似乎是一个“甲骨文”没有使用的bug,请在EclipseLink中登录此bu并投票支持它

要解决此问题,请创建自己的OraclePlatform子类并重写

getStoredProcedureTerminationToken() {
  return ";"
}
(请在错误中包括DDL应使用其他方法,而不是StoredProcedureTerminationToken


您可以使用“eclipselink.target数据库”属性设置平台。

我遇到了这个问题,通过在persistence.xml中设置属性解决了这个问题

自Eclipselink 2.6以来,有一个属性“Eclipselink.ddlgen terminate statements”,当设置为true时,将在每个语句后面追加一个分隔符

我想当时我用的是H2数据库


有关更多详细信息,请参见

@editors:感谢您销毁persistence.xml-。-以上表格仅为示例。数据库将在用户众多的项目中增长。因此,手动替换换行符HI,设置“eclipselink.target数据库”是不切实际的测试的属性没有帮助。我正在使用postgreSQL,并且没有指定“eclipselink.target数据库”jpa应该使用JDBC提供的元数据来自动设置此值,以确定目标数据库。不幸的是,
没有帮助…拯救了我的一天!您需要做的是创建OraclePlatform的子类,将受保护变量
storedProcedureTerminationToken设置为
,并使用其qual属性eclipselink.target数据库的指定名称。这似乎不适用于oracle,因为OraclePlatform定义了一个StoredProcedureTermination托克“”
getStoredProcedureTerminationToken() {
  return ";"
}