2009-08-02 13 views
6

po uruchomieniu narzędzi hibernacji czyta z db i tworzy klasy java dla każdej tabeli, i klasy java dla złożonych kluczy podstawowych. to świetnie.Uruchamianie generowania adnotacji narzędzia hibernacji bez atrybutu "katalog"

problemem jest to linia

@Table(name="tst_feature" 
    ,catalog="tstdb" 
) 

podczas gdy wymagana jest nazwa tabeli, „Katalog” atrybut nie jest wymagane. czasami chcę używać „tstdb”, czasami chcę używać „tstdev”

myślałem które db został wybrany zależy JDBC URL połączenia ale kiedy zmienić JDBC URL, by wskazywał „tstdev”, to jest wciąż przy „tstdb”

tak, wiem, co należy zrobić, po prostu nie wiem jak jej odbywa moje opcje są

  • tłumić generowanie „katalogu” atrybutu obecnie robię to ręcznie (nie bardzo wydajne) czy mogę napisać program, który analizuje plik Java i usunąć atrybut ręcznie ale mam nadzieję, że nie trzeba

LUB

  • znaleźć sposób, aby powiedzieć hibernacji, aby zignorować atrybut "catalog" i użyć schematu jawnie określonego. Nie znam dokładnego ustawienia, które muszę zmienić, aby to osiągnąć, lub nawet, jeśli opcja jest dostępna.

Odpowiedz

7

Trzeba podążać 3 kroki -

1) w hibernate.cfg.xml, dodać tę właściwość

hibernate.default_catalog = MyDatabaseName 

(jak określono w powyższym poście)

2) W hibernate.reveng.xml, dodać wszystko Filtry stołowe w ten sposób:

table-filter match-name="MyTableName" 

(tylko to nie nazwa katalogowa tutaj)

3) Regeneracja hibernacji kod

nie będzie widać żadnej nazwy katalogu w żadnej *.hbm.xml plików.

Użyłem Eclipse Galileo i Hibernate - wersja 3.2.4.GA.

1

Istnieje dostosowanie do generowania, które określi tabele do umieszczenia w jakim katalogu.

Możesz określić katalog ręcznie (w pliku reveng, element <table>) lub programowo (w niestandardowej klasie ReverseEngineeringStrategy, jeśli dobrze pamiętam).

Niedawno musiałem zmodyfikować szablony generowania.

znaleźć w dokumentacji referencyjnego:

Przepraszamy, może to być bardziej precyzyjne, ale nie mam teraz dostępu do mojego komputera roboczego.

+0

element tabeli wybiera tabele z katalogów, tak. ale tego nie chcę. chcę jednostka być generowane bez atrybutu „katalogu” jeżeli atrybut Katalog jest tam, bez względu na to, co mój JDBC URL jest to nadal wskazywać na tym samym schemacie, chcę mieć możliwość przełączania schemat bez ponownego generowania encji. –

+0

i przyjrzał się plikami FTL jest linia, która mówi <#if clazz.table.catalog? Istnieje> , katalog = "$ {clazz.table.catalog}" jakiś pomysł, w jaki sposób zrobić ustawiłem to na false? –

+1

udało mi się znaleźć użyć xxx w twoim pliku hibernate.cfg.xml –

0

Katalog atrybutów jest atrybutem "połączenie" i powinien być określony w pliku konfiguracyjnym "połączenie" hibernate.cfg.xml, a NIE w pliku konfiguracyjnym "danych" *.hbm.xml.

Generuję kod hibernacji za pomocą zadania ant <hibernatetool> i umieszczam to zadanie zamienia po regeneracji (zastąp nazwę schematu z bazy danych).

<replace dir='../src' token='catalog="schema-name"' value=''> 

Po generacji lista atrybutów została usunięta.

To obejście problemu, ale generowany kod działa w moim środowisku produkcyjnym o innej nazwie schematu.

Powiązane problemy