2010-08-10 12 views
8

Obecnie pracuję nad budowaniem biblioteki do modularyzacji niektórych z mojego kodu i mam problem z Hibernate.Wiele konfiguracji hibernacji

W mojej głównej aplikacji mam konfigurację hibernacji, aby uzyskać informacje, które trzeba uruchomić, ale mam również potrzebę hibernacji w mojej bibliotece, ponieważ niektóre z obiektów, które chcę, mogą być używane w innych aplikacjach.

Kiedy uruchamiam mój serwer Tomcat, przy obu ustawieniach hibernacji, dostaję błędy stwierdzające, że ziarna nie mogą zostać rozwiązane i jeden mówi, że moje parametry pozycyjne nie są w moim zapytaniu. Jednak po uruchomieniu Tomcat tylko z konfiguracją Hibernate aplikacji zaczyna się dobrze.

Oto co configs wyglądać ...

Z biblioteki:

<?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> 
    <mapping resource="blah.hbm.xml"/> 
    <mapping resource="blargh.hbm.xml"/> 
    <mapping resource="stuff.hbm.xml"/> 
    <mapping resource="junk.hbm.xml"/> 
    <mapping resource="this.hbm.xml"/> 
</session-factory> 

</hibernate-configuration> 

A z aplikacji:

<?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.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 

    <!-- Enable the query cache --> 
    <property name="hibernate.cache.use_query_cache">true</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">false</property> 

    <!-- mapping files --> 

    <mapping resource="appStuff"/> 
    <mapping resource="appBlah"/> 
    <mapping resource="appBlargh"/> 
    <mapping resource="appJunk"/> 
    <mapping resource="appThis"/>  

</session-factory> 

</hibernate-configuration> 

nadal jestem całkiem nowe do hibernacji i ten to dziwna konfiguracja.

Odpowiedz

12

Można załadować pliki konfiguracji hibernacji programowo.

SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory(); 

To pozwoli Ci utworzyć dwa obiekty SessionFactory. Zakładam jednak, że chcesz użyć tej samej SessionFactory dla swojej aplikacji i modułu.

Można załadować zarówno hibernacji plików XML do jednego obiektu DOM (łączenie „session-fabrycznych” dzieci otagować modułu z nich swojej aplikacji), a następnie użyć następującego kodu:

import org.hibernate.cfg.Configuration; 
// ... 
SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory(); 

Edit: Sesja- fabryka nie została wydrukowana, ponieważ miała więcej niż i mniej niż znaków.

+0

Wygląda na to, czego szukam, ale pozwól, że o to zapytam. Czy byłoby lepiej, aby moja biblioteka miała własną fabrykę sesji, z której może korzystać, czy też powinienem mieć jedną fabrykę sesji na całość? Dla mojej sytuacji wygląda na to, że wiele fabryk sesji byłoby bardziej odpowiednie, ale nie wiem, czy popadnę w kłopoty, jeśli pójdę tą drogą. – Shaded

+0

Szczerze mówiąc, nie mam tak dużego doświadczenia z Hibernate. Jednak z tego, co opisujesz, myślę, że wiele obiektów SessionFactory wydaje się odpowiednie dla twojego przypadku użycia, ponieważ pomaga w modularyzacji kodu. Ale nie wierz mi na słowo, bo nie wiem nawet, czy może to mieć wpływ na wydajność, na przykład czy jakiekolwiek inne problemy. –

+0

Dzięki za pomoc, jestem pewien, że wiele to droga. Będę biec z tym i mam nadzieję, że to nie wróci, by mnie ugryźć! Jeszcze raz dziękuję! – Shaded

2

jeśli chcesz to zrobić, użyj fragmentu hibernacji 1. Othewise można po prostu przejść ścieżkę (w systemie plików lub w ścieżce klasy) z hibernate.cfg.xml chcesz użyć

Z biblioteki

SessionFactory sf = new Configuration() 
    .configure("Fromthelibrary.cfg.xml") 
    .buildSessionFactory(); 

A z aplikacji:

SessionFactory sf = new Configuration() 
     .configure("Fromtheapp.cfg.xml") 
     .buildSessionFactory(); 
Powiązane problemy