1. Hibernate Tools.
1.1. Instalacja.
Jest kilka sposobów na zainstalowanie Hibernate Tools - albo ściągając dystrybucję JBoss IDE (eclipse dostosowany do tworzenia aplikacji bazodanowych), albo podając stronę update do "czystego" eclipse'a i ściągnąć z niej Hibernate Tools (trzeba będzie zainstalować wcześniej parę pakietów ze standardowych stron update eclipse'a). Trzeci sposób to ściagnięcie archiwum, rozpakowanie go do odpowiednich folderów eclipse'a i uruchomienie eclipse'a z przełącznikiem -clean (choć ze względu na wymaganie dodatkowych pluginów może nie działać z marszu).
1.2. Uwagi początkowe
1. koniecznie ściągnij sobie najnowszy Hibernate Core i Hibernate Annotations, bo może się zdarzyć jakaś niekompatybilność między tymi dwoma pakietami (mi się zdarzyła i 3 dni szukałem błędu).
2. Żeby korzystać z tych adnotacji EJB3 musisz dociągnąć ze strony hibernate'a pakiet Hibernate Annotations.
3. Klasy DAO korzystają z pakiety Entity Manager hibernate'a. nie wiem, czy to fajne, bo nie używałem.
4. Postgresql nie rozpoznaje wielkich i małych liter, zatem po tej inżynierii wstecznej będziesz musiał trochę popoprawiać nazwy klas (lub zostawić je wbrew konwencji). Jeśli masz do czynienia z MySQL, to nie ma tego problemu.
6. Żeby móc skorzystać z automatycznego generowania id w bazie Postgresql będziesz musiał stworzyć w bazie sekwencję o nazwie hibernate_sequence i w klasach do każdego id dodać taką adnotację:
@GeneratedValue(strategy=GenerationType.AUTO)
1.3. Generowanie klas POJO.
Poradnik jak wygenerować klasy POJO korzystając z Hibernate Tools. UWAGA: żeby klasy POJO można było wygenerować, baza danych pod aplikację musi być już gotowa (można ją wygenerować takimi narzędziami jak Azzurri Clay).
PLIK KONFIGURACYJNY HIBERNATE
1. Utworzyć plik konfiguracyjny:
new->other…->Hibernate->hibernate configuration file
2. Wypełnić formularz:
Session factory name: nic
Database dialect: PostgreSQL
**Driver class:jedyny możliwy
Connection URL: jdbc:postgresql://localhost/NazwaBazy
Default Schema: nic
Default Catalog: nic
Username: nazwaUżytkownikaZalogowanego
Password: nic
3. Wybrać Finish na formularzu.
4. Jeśli łącząc się do bazy danych nie potrzebujesz hasła, należy dopisać do utworzonego pliku (np. zaraz po własności user):
<property name="hibernate.connection.password"></property>
KONFIGURACJA KONSOLOWA
5. Utworzyć konfigurację konsolową:
new->other…->Hibernate->Hibernate Console Configuration
6. Wypełnić formularz tworzenia konfiguracji konsolowej w następujący sposób:
Name: jakaś nazwa konfiguracji
Property file: nic
Configuration file: utworzony w punktach 1 do 4 plik hibernate.cfg.xml
Entity Resolver: nic
Enable hibernate/ejb3 annotations: zaznaczone (w nowszej wersji trzeba zaznaczyć przycisk radio o nazwie 'Annotations (jdk 1.5+)')
7. Kliknąć Add JAR/Dir… (ten i następny punkt nie jest konieczny, jeśli ma się do czynienia z aplikacją JEE, w której w katalogu lib jest wrzucony odpowiedni sterownik, gdyż katalog ten razem z zawartością jest już domyślnie dodany do ściezki).
8. Wybrać plik jar sterownika do jdbc (np. postgresql-8.1-407.jdbc3.jar)
9. Kliknąć Finish
KONFIGURACJA GENERACJI KODU
10. Rozpocząć konfigurację generacji kodu:
Run->Hibernate Code Generation…->Hibernate Code Generation (jeśli tej pozycji nie ma w menu, należy ją Run, należy ją dodać, przechodząc do Window->Customize Perspective…->Commands->Available command groups i zaznaczając tam Run Hibernate Code Generation).
11. Kliknąć prawym przyciskiem myszy na Hibernate Code Configuration i wybrać new.
12. Nadać nazwę konfiguracji:
Name: jakaś nazwa naszej konfiguracji.
13. Wypełnić zakładkę Main:
Console configuration: wybrać utworzoną w punktach 5-9 konfigurację.
Output directory: jakikolwiek katalog do którego mają iść wygenerowane pliki
Reverse Engineer from JDBC connection: zaznaczone
Package: pakiet w jakim mają się znaleźć wygenerowane pliki.
14. Utworzyć i wybrać plik inżynierii wstecznej.
Reveng.xml: wybrać setup…->Create new-> wybrać katalog (np. katalog projektu)->next->kliknąć refresh.
UWAGA: jeżeli po kliknięciu refresh na liście Database Schema nie pojawi się rozwijalny element "public",
to znaczy, że coś jest nie tak z samą bazą i dostępem do niej.
Jeśli się pojawił, to wybieramy go i klikamy include…, po czym finish.
15. Zakładka Main ciąg dalszy:
Reveng. strategy: nic
Co do tych radio buttonów poniżej, to nie wiem, zostawiłem domyślne ustawienia.
16. Wypełnić zakładkę Exporters:
Use java 5 syntax: zaznaczone
Generate EJB3 annotations: zaznaczone (UWAGA, pliki będą importować biblioteki z pakietu Hibernate Annotations)
W polu exporters: zaznaczone Domain code, ew. coś więcej
17. Wybrać Run…
P.S. Nie wolno zapominać o dopisaniu własnych klas do pliku mapującego. Przykład takiego pliku z dopisanymi klasami:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/JEEGroupware</property> <property name="hibernate.connection.username">astral</property> <property name="hibernate.connection.password"></property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <mapping class="com.wikidot.technojazda.pojo.Contact"/> <mapping class="com.wikidot.technojazda.pojo.ContactType"/> <mapping class="com.wikidot.technojazda.pojo.Event"/> <mapping class="com.wikidot.technojazda.pojo.EventAttenders"/> <mapping class="com.wikidot.technojazda.pojo.EventAttendersId"/> <mapping class="com.wikidot.technojazda.pojo.Issue"/> <mapping class="com.wikidot.technojazda.pojo.IssueComment"/> <mapping class="com.wikidot.technojazda.pojo.Milestone"/> <mapping class="com.wikidot.technojazda.pojo.Participant"/> <mapping class="com.wikidot.technojazda.pojo.Project"/> <mapping class="com.wikidot.technojazda.pojo.ProjectParticipation"/> <mapping class="com.wikidot.technojazda.pojo.Role"/> </session-factory> </hibernate-configuration>