10

我正在将 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)
4

3 回答 3

5

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

从 Eclipselink 2.6 开始,有一个属性“eclipselink.ddlgen-terminate-statements”,当设置为 true 时,每个语句都会附加一个分隔符。

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

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

于 2015-09-20T15:23:20.067 回答
3

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

您使用什么工具执行脚本?似乎是一个“;”的错误 未用于 Oracle,请在 EclipseLink 中记录此 bu 并投票支持。

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

getStoredProcedureTerminationToken() {
  return ";"
}

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

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

于 2010-08-31T12:59:01.073 回答
0

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

于 2010-08-31T07:47:45.740 回答