通过eclipseLink生成sql的问题 - 缺少分隔符

时间:2010-08-31 07:18:21

标签: 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-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)

3 个答案:

答案 0 :(得分:5)

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

自Eclipselink 2.6以来,有一个属性&#34; eclipselink.ddlgen-terminate-statements&#34;当设置为true时,分隔符将附加到每个语句。

我想我当时正在使用H2数据库。

有关详细信息,请参阅http://www.eclipse.org/eclipselink/api/2.6/org/eclipse/persistence/config/PersistenceUnitProperties.html

答案 1 :(得分:3)

用于分隔语句的标记取决于所使用的DatabasePlatform。 我假设您正在使用Oracle,因为它似乎是唯一一个不使用分隔符的代码,尽管我不确定原因。

您使用什么工具执行脚本?看起来像一个“;”的错误没有用于Oracle,请在EclipseLink中记录这个并投票给它。

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

getStoredProcedureTerminationToken() {
  return ";"
}

(请在错误中包含DDL应使用不同方法的错误,而不是StoredProcedureTerminationToken。

您可以使用“eclipselink.target-database”属性设置平台。

答案 2 :(得分:0)

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