JPA(TopLink) -MySQL

0

Witam

Ma pytanie odnośnie framework'a JPA, mianowicie podczas pierwszego mapowania tabele się tworzą w bazie wszystko przebiega ładnie i w logach serwera nie dostaje żadnych zbędnych komunikatów. Teraz przy chęci dodania znowu jakiś wartości do bazy dostaje komunikat że tabele już istnieją. Co jest rzeczą oczywistą, że one tam są.

[TopLink Info]: 2010.09.14 04:22:49.196--ServerSession(1721336021)--TopLink, version: Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))
[TopLink Info]: 2010.09.14 04:22:49.595--ServerSession(1721336021)--file:/home/nonus25/NetBeansProjects/jpaMySQL/build/classes/-jpaMySQLPU login successful
[TopLink Warning]: 2010.09.14 04:22:49.624--ServerSession(1721336021)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'STUDENCI' already exists
Error Code: 1050
Call: CREATE TABLE STUDENCI (ID BIGINT NOT NULL, nazwisko VARCHAR(255), imie VARCHAR(255), grupa_dziekanska BIGINT, PRIMARY KEY (ID))
Query: DataModifyQuery()
[TopLink Warning]: 2010.09.14 04:22:49.629--ServerSession(1721336021)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'SGROUP' already exists
Error Code: 1050
Call: CREATE TABLE SGROUP (ID BIGINT NOT NULL, group_name VARCHAR(255), PRIMARY KEY (ID))
Query: DataModifyQuery()
[TopLink Warning]: 2010.09.14 04:22:49.702--ServerSession(1721336021)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'SEQUENCE' already exists
Error Code: 1050
Call: CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(38), PRIMARY KEY (SEQ_NAME))
Query: DataModifyQuery()

Teraz pytanie czy zna ktoś jakąś sztuczkę aby się pozbyć tego błędu 1050 ??
Może istnieje jakiś sposób aby poinformować JPA, że tabele już istnieją i chcemy tylko dodać rekordy??
ps. rekordy się dodają do bazy, tylko zastanawiam się czy z czasem przy większej ilości danych nie będzie to miało wpływu na działanie bazy ??

0

Sprawdź co masz w konfiguracji pod flagą "toplink.ddl-generation". Mi to wygląda na "create-tables", a po pierwszym uruchomieniu powinno być juz zawsze "none".

0

Dzięki za podpowiedz

W sumie się przydała nawet bardzo. Sprawa banalna aczkolwiek nie poradziłem sobie z nią bez podpowiedzi. Dokładnie mówiąc trzeba usunąć całą linijkę

    <property name="toplink.ddl-generation" value="create-tables"/>

lub też zaznaczyć none przy konfiguracji pliku persistence.xml.

Teraz jak uzyskać zmianę tej wartości automatycznie, napisać program do edycji takiego pliku, czy też jest jakiś inny znacznik który zmieni to za nas ??

0

Możesz napisać hooka, który po starcie aplikacji będzie zmieniał wartość w pliku. Całkiem zgrabne, ale...

  1. Na bazie i tak nie masz potworzonych indeksów, widoków i triggerów - musisz zrobić je ręcznie.
  2. Bazę produkcyjną należy, moim zdaniem, tworzyć za pomocą skryptów SQL, a nie automatu. Pozwala to na automatyczne dodanie ww. elementów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1