2009-08-13 17 views

Odpowiedz

7

Nie, nie ma możliwości zrobienia tego po wyjęciu z pudełka. Mam wokół niego w przeszłości, stosując następujące - raczej zaangażowany - podejście:

  1. Stwórz własną adnotacji, @TableSpec, które ma tabel i inne niezbędne atrybuty.
  2. Przedłuż org.hibernate.cfg.Configuration i przesuń getTableMappings(), aby zwrócić udekorowane obiekty Table (patrz poniżej).
  3. Rozszerz org.hibernate.mapping.Table i przesuń sqlCreateString() i/lub sqlAlterStrings(), aby dołączyć specyfikację obszaru tabel (i dodatkowe ustawienia, jeśli takie istnieją).
  4. Zamiast hbm2ddl narzędzie (lub ant zadania) napisać własny, który stworzy swój obiekt Configuration, przetwarzać wszystkie pliki klasowe gromadzenia i interpretacji swoich @TableSpec adnotacje i powołać Configuration.generateSchemaCreationScript() lub generateSchemaUpdateScript() generować rzeczywistą DDL.

Jak powiedziałem, raczej zaangażować :-) Jako alternatywę, jeśli wszystkie Twoje odwzorowane stoły korzystać z tego samego obszaru tabel, można przedłużyć Oracle dialektem, którego używasz i zastąpić getTableTypeString() aby przywrócić tabel spec. Chociaż jest to brzydki hack (ponieważ pierwotnym celem tableTypeString jest dostarczenie typu silnika MySQL), działa i jest z pewnością dużo szybszy i łatwiejszy niż powyżej.

Powiązane problemy