2010-08-31 89 views
9

我使用epanel和jpa一起使用。 在我的persistence.xml中,我定義了生成一個create.sql文件。該文件將被生成,但缺少';' - 每個sql語句的分隔符。通過eclipseLink生成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) 
+1

@editors:感謝破壞的persistence.xml -.- – 2010-08-31 07:56:48

回答

0

如果它是一次性的,取代每一個 「\ n \ n」 個用 「; \ n \ n」 個。雖然不會推薦這是一個永久的解決方案...

+0

上表只是一個例子。該數據庫將在許多用戶的項目中增長。所以,它不切實際的手動替換換行符 – 2010-08-31 08:03:51

2

用於分隔語句的令牌取決於正在使用的DatabasePlatform。 我假設你正在使用Oracle,因爲它似乎是唯一一個不使用分隔符的代碼,儘管我不知道爲什麼。

你用什麼工具執行腳本?看起來像一個錯誤,「;」沒有被用於Oracle,請在EclipseLink中登錄這個bu並投票支持。

要解決此問題,創建自己的OraclePlatform子類覆蓋,

getStoredProcedureTerminationToken() { 
    return ";" 
} 

(請在一個不同的方法應該用於DDL的bug,而不是StoredProcedureTerminationToken。

可以設置您的平臺使用「eclipselink.target-database」屬性。

+0

嗨,設置「eclipselink.target數據庫」屬性的測試沒有幫助。 我使用postgreSQL並沒有指定「eclipselink.target-database」屬性。 jpa應該使用JDBC提供的用於確定目標數據庫的元數據自動設置此值。 – 2010-08-31 14:34:45

+0

不幸的是,''沒有幫助... – kolobok 2014-05-15 07:40:19