2010-08-31 6 views
9

utilizzo l'eclipseLink con jpa. nel mio persistence.xml, ho definito per generare un file create.sql. il file verrà generato, ma con ";" - separatori mancanti per ogni istruzione sql.Problemi con la generazione di sql via eclipseLink - separatore mancante

esiste la possibilità di definire un separatore in persistence.xml o in qualche altro modo?

Esempio 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> 

Esempio generato il file 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: grazie per distruggere il persistence.xml -.- –

risposta

0

Se si tratta di un'una tantum, sostituire ogni "\ n \ n" con "; \ n \ n" . Non lo consiglio come soluzione permanente ...

+0

tabelle di cui sopra sono solo esempi. il database crescerà in progetti con molti utenti. quindi, non è pratico sostituire i linebreak manualmente. –

2

Il token utilizzato per separare le istruzioni dipende dal DatabasePlatform in uso. Suppongo che tu stia usando Oracle, visto che dal codice sembra essere l'unico che non usa un separatore, anche se non sono sicuro del perché.

Quale strumento stai usando per eseguire lo script? Sembra un bug che ";" non viene utilizzato per Oracle, si prega di registrare questo bu in EclipseLink e votare per questo.

Per risolvere il problema di creare la vostra sottoclasse OraclePlatform e override,

getStoredProcedureTerminationToken() { 
    return ";" 
} 

(si prega di includere nel bug che un diverso metodo dovrebbe essere utilizzato per DDL, non lo StoredProcedureTerminationToken.

È possibile impostare la tua piattaforma che utilizza la proprietà "eclipselink.target-database"

+0

Salve, l'impostazione della proprietà "eclipselink.target-database" per i test non è stata di aiuto. sto usando postgreSQL e non ho specificato la proprietà "eclipselink.target-database". jpa dovrebbe impostare automaticamente questo valore utilizzando i metadati forniti da JDBC per determinare il database di destinazione. –

+0

Sfortunatamente, '' non ha aiutato ... – kolobok

Problemi correlati