Java 通过eclipseLink生成sql时出现问题-缺少分隔符
我正在使用eclipseLink和jpa。 在persistence.xml中,我定义生成一个create.sql文件。将生成该文件,但缺少“;”-每个sql语句的分隔符 是否可以在persistence.xml中定义分隔符,或者以其他方式定义分隔符 示例persistence.xml: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
<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 ";"
}