2013-06-14 12 views
6

Nasz programowy program użytkowy Hibernate jest programowalny Configuration, aby skonfigurować nasze SessionFactory i tym podobne. Właśnie zmigrowałem nas z wersji 3 do wersji 4 programu Hibernate. Teraz otrzymuję błąd "Deklaracja hibernacji typu elementu" musi zostać zadeklarowana. " co mówi jest wyjątek SaxParseException. To jest świetne i wszystko, ale sprawdziłem katalog WEB-INF/lib i znajduje się tam plik 4-rdzeniowy .jar w wersji 4, więc znajduje się w ścieżce klas.Błąd hibernacji, prawdopodobnie z deklaracją DTD

Na początku myślałem, że to dlatego, zespół Hibernate migracji z

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

do

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

Ale to nie naprawić błąd. Co się dzieje? W oddzielnym projekcie, w którym korzystam z pliku konfiguracyjnego XML dla Hibernate, wykonałem tę samą migrację i wszystko poszło dobrze. Należy pamiętać, że w moim środowisku należy użyć klasy classpath, DTD nie można pobrać z Internetu ani niczego w tym stylu. To nie powinno tak być.

edit: tu jest wyjątek na żądanie:

Caused by: org.xml.sax.SAXParseException; systemId: ; lineNumber: 6; columnNumber: 20; Element type "hibernate-mapping" must be declared. 
     at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213) 
     at org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLError(XMLValidator.java:1807) 
     at org.apache.xerces.validators.common.XMLValidator.validateElementAndAttributes(XMLValidator.java:3633) 
     at org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLValidator.java:1229) 
     at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:938) 
     at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381) 
     at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098) 
+0

można zakładać ślad wyjątku prosimy wyjątek SAXParser również powiedzieć, co poszło nie tak .. –

+0

@AnanthaSharma Ok Zamieściłem go .. – KyleM

+0

jest to plik hibernate.cfg.xml lub hbm.xml plik ... wpis mapowania hibernacji znajduje się w plikach hbm.xml, możesz spróbować użyć tego 'SYSTEMU mapowania hibernacji' ' –

Odpowiedz

10

ja też po prostu przeniesione z 3,0 do 4,0, zakładam 3 przyczyny używam następujących

RZECZYWISTĄ FIX DTD w tej sprawie

Upewnij się, że nie masz żadnych starych słoików 3.0 w ścieżce, w przeciwnym razie możesz zobaczyć ten wyjątek.

Możliwa przyczyna 1

Dla hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

A dla plików HBM

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

działa dobrze dla mnie.

Możliwa przyczyna 2

Masz misspelt <hibernate-mapping> w pliku HBM.

EDIT:

Używam mieszanych konfiguracji plików zarówno programowe i cfg. Kiedy próbowałem używać wszystkich programów, nie działało to dla mnie. Ani nie dostałem dużo pomocy od SO. Ale poniższy działał dla mnie.

Mój question pomógł mi to naprawić.

Ogólnie znane

chodzenie programowej jest złym pomysłem. Ponieważ istnieje wiele programowych rzeczy, które musisz dodać z kolumny na zmienne odwzorowanie na typ zmiennej. To będzie koszmar z debugowania. Sugeruję programowanie non dla rzeczy, które można wykonywać bez programowania.Dla mnie po prostu potrzebowałem uzyskać hasło do nazwy użytkownika z wiersza cmd, dzięki czemu mogę wdrożyć produkt na dowolnym serwerze. Więc zrobiłem to programowo.

+0

Wyraźnie zaznaczono w pytaniu, że nie używam .cfg.xml, używam programistycznej konfiguracji ... czy wersja .dtd z konfiguracji musi pasować do wersji .dtd z mapowania hibernacji? na przykład czy oba muszą być v3.0? Nie sądzę, że tak, więc nie widzę, jak to ma znaczenie ... DTD po prostu opisuje składnię/strukturę pliku XML, prawda? – KyleM

+0

Przy okazji przyjrzę się możliwej przyczynie 2. Dzięki za wpis. – KyleM

+0

Widziałem SAXException, proszę o zachowanie cierpliwości, jest wiele rzeczy, które poszły nie tak i nie pamiętam, co zmieniło ustalony wyjątek (szczerze mówiąc nie obchodzi mnie to), staram się tylko przypomnieć wszystko, co zrobiłem w tym czas naprawić mój problem. Zaufaj mi, że to działa, więc my się tam dostaniemy. – Siddharth

1

również migrację z hibernacji 3, 4,

przypadku pliku hibernate.cfg.xml i stosować po DTD

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

przypadku pliku odwzorowania i używać następujących urządzeń: DTD

<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

Jeśli zmienię dtd, spowoduje to wyjątek, ponieważ hibernacja 4 używa xsd zamiast dtd. Hibrenate Jira of migrating dtd to xsd

Musisz więc użyć pliku xsd zamiast dtd.

Hibernate hbm example

+1

Nie, nie. Ta informacja jest bezpośrednio sprzeczna z dokumentacją Hibernate, która mówi, że nadal możesz używać 3.0 DTD. Ponadto naprawiłem wszystko wczoraj, jak wspomniano w komentarzach do mojego posta ... więc wszystko działa teraz przy użyciu DTD 3.0. – KyleM

Powiązane problemy