2010-08-31 9 views
9

Używam eclipseLink z jpa. w moim pliku persistence.xml, zdefiniowanym w celu wygenerowania pliku create.sql. plik zostanie wygenerowany, ale z brakującymi separatorami ';' - dla każdej instrukcji sql.Problemy z generowaniem sql za pośrednictwem eclipseLink - brakujący separator

Czy istnieje możliwość zdefiniowania separatora w pliku persistence.xml lub w inny sposób?

Przykład 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> 

Przykład generowane SQL plik

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: Dzięki za zniszczenie persistence.xml -.- –

Odpowiedz

0

Jeśli jest jednorazowa wymienić każdy "\ n \" z "; \ n \" . Nie poleciłbym tego jako stałego rozwiązania ...

+0

powyższe tabele są tylko przykłady. baza danych będzie rosnąć w projektach z wieloma użytkownikami. więc niepraktyczne jest zastępowanie ręcznego podziału linii ręcznie –

2

Token używany do rozdzielania instrukcji zależy od używanej bazy danych. Zakładam, że używasz Oracle, ponieważ z kodu wydaje się być jedynym, który nie używa separatora, chociaż nie jestem pewien dlaczego.

Jakiego narzędzia używasz do wykonywania skryptu? Wygląda jak błąd, który ";" nie jest używane w Oracle, zaloguj się w EclipseLink i zagłosuj na niego.

Aby obejść problem utworzyć własne podklasy OraclePlatform i zastąpić,

getStoredProcedureTerminationToken() { 
    return ";" 
} 

(prosimy o umieszczenie w błąd, że inna metoda powinna być wykorzystywana do DDL, nie StoredProcedureTerminationToken.

Można ustawić Twoja platforma używa właściwości "eclipselink.target-database"

+0

Cześć, ustawienie właściwości "eclipselink.target-database" dla testów nie pomogło. używam PostgreSQL i nie określiłem właściwości "eclipselink.target-database". jpa powinien automatycznie ustawić tę wartość, korzystając z metadanych udostępnianych przez JDBC w celu określenia docelowej bazy danych. –

+0

Niestety, '' nie pomogło ... – kolobok

Powiązane problemy