是否有可能在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>
示例生成的sql文件:
CREATE TABLE app_user (
ID INTEGER NOT NULL,
last_name VARCHAR(50) NOT NULL,
username VARCHAR(15) NOT NULL,
user_password VARCHAR(50) NOT NULL,
first_name VARCHAR(50) NOT NULL,
PRIMARY KEY (ID))
CREATE TABLE SEQUENCE (
SEQ_NAME VARCHAR(50) NOT NULL,
SEQ_COUNT DECIMAL(38),
PRIMARY KEY (SEQ_NAME))
INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT)
values ('SEQ_GEN_TABLE', 0)
答案 0 :(得分:5)
我遇到了这个问题,并通过在persistence.xml中设置属性来解决它。
自Eclipselink 2.6以来,有一个属性&#34; eclipselink.ddlgen-terminate-statements&#34;当设置为true时,分隔符将附加到每个语句。
我想我当时正在使用H2数据库。
答案 1 :(得分:3)
用于分隔语句的标记取决于所使用的DatabasePlatform。 我假设您正在使用Oracle,因为它似乎是唯一一个不使用分隔符的代码,尽管我不确定原因。
您使用什么工具执行脚本?看起来像一个“;”的错误没有用于Oracle,请在EclipseLink中记录这个并投票给它。
要解决此问题,请创建自己的OraclePlatform子类并覆盖
getStoredProcedureTerminationToken() {
return ";"
}
(请在错误中包含DDL应使用不同方法的错误,而不是StoredProcedureTerminationToken。
您可以使用“eclipselink.target-database”属性设置平台。
答案 2 :(得分:0)
如果是一次性,请将每个“\ n \ n”替换为“; \ n \ n”。不建议将此作为永久性解决方案......