2011-11-29 9 views
10

Czy ktoś koniecznie trzeba dokonać wyboru między ścisłą użyciu adnotacji i hibernacji pliki konfiguracyjne, czy jest to możliwe do wykorzystania w obie strony w tym samym czasie w tym samym projekcie?Czy można używać zarówno adnotacje i plików hbm.xml w tym samym projekcie w hibernacji?

Mamy duży projekt sporządzono z Hibernate 3.2.5 i POJOs skonfigurowanych z .hbm.xml plików. Projekt wykorzystuje hibernacji SessionManager fabrycznie i nie JTA oparte EntityManager fabryki.

Istnieje ponad sto POJOs skonfigurowany w ten sposób i oryginalny zespół deweloper jest skłonny, aby przełączyć się do adnotacji.

W międzyczasie musimy rozszerzyć projekt o więcej POJO, które chcemy skonfigurować przy pomocy adnotacji Hibernate i chcemy pozostać przy Hibernate - jeśli to możliwe - i nie przełączać się na JPA.

Czy można użyć kombinacji plików konfiguracyjnych .hbm.xml dla niektórych POJO i adnotacji dla innych jednocześnie?

+1

Biorąc pod uwagę nieporęczność narzędzi takich jak NetBeans, aw wielu przypadkach nawet Eclipse, często dostaję błędy, nawet gdy koduję i poprawnie konfiguruję.Tak więc dla czegoś, co wielu ekspertów Javy mówi "dunno, nigdy nie próbowałem", nie zmarnowałbym czasu na próbny błąd, nie będąc pewnym, czy to mój błąd, czy IDE, lub po prostu dlatego, że nie można tego zrobić po prostu w Javie/Hibernate. – Skyhan

Odpowiedz

7

Manu udzielił odpowiedzi, ale jeśli zamierzasz przejść do adnotacji i chcesz przekonwertować te pliki hbm.xml na adnotacje. Proszę kontynuuj. Możesz użyć narzędzi, które wygenerują klasy pojo z adnotacjami z istniejących tabel. Nawet używając tych narzędzi, nie musisz zmieniać drugiego kodu, po prostu generuj pojęty jak poprzednio. tj. nie zmieniaj nazw właściwości. Pracowałem nad tym samym projektem i użyłem do tego skryptu Anta.

13

Tak można.Documentation mówi

pamiętać, że można mieszać korzystanie hbm.xml starszych oraz podejście adnotacji. Elementem zasobów może być plik hbm lub deskryptor wdrażania XML EJB3.

Istnieje kilka punktu kontrolnego choć:

jednak nie można zadeklarować klasę kilka razy (czy uwagami lub poprzez hbm.xml). Nie można łączyć strategii konfiguracyjnych (hbm z adnotacjami) w hierarchii jednostek.

Możesz znaleźć więcej informacji here.

0

Myślę, że ten wpis jest świetny, ale z rzeczywistym przykładem kodu będzie lepiej. Próbowałem już ManuPK ref i tak to działa.
Mój rzeczywisty sędzią jest tutaj: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/ch01.html#setup-configuration

//typical way to use cfg.xml 
Configuration cfg = new Configuration(); 
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory(); 
Session s = f.openSession(); 
s.persist(new EntityObj()); 

//to use both annotation & cfg.xml mappings, use AnnotationConfiguration instead of Configuration 
AnnotationConfiguration cfg = new AnnotationConfiguration(); 
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory(); 
Session s = f.openSession(); 
s.persist(new EntityObj()); 

AnnotationConfiguration odczyta cfg.xml jak zwykle do analizowania zarówno < mapowanie zasobów = "your_entity.hbm.xml"/> i < klasa odwzorowania = "my. entity.objclass "/ >
Zrzeczenie się odpowiedzialności: Próbowałem używać starego Hibernacji w wersji 3.2.1 i działa dobrze.

Powiązane problemy