Entita Zakazka ma vsechny sloupecky tabulky ZAKAZKY, az teprve
ZakazkaRozsirena ma vice sloupecku v SQL - zaroven jsou tyto sloupecky
zahrnuty i s mapovanim v entite ZakazkaRozsirena.
Jeste je zajimave, ze chyba, kterou to vypisuje je
"org.firebirdsql.jdbc.FBSQLException: Column name DTYPE not found in
result set.". Sloupecek DTYPE nemame nikde v databazi ani v programu
pouzit. Kdyz jsem hledal na google, tak DTYPE v Hibernate by melo byt
"Dicriminator - The default discriminator value is now the entity name
rather than the fully qualified class name (which means usually the
unqualified class name)." Abych se priznal, tak nerozumim, k cemu to je
dobre.
Pri mapovani entity to tam u kazde pise:
INFO AnnotationBinder:398 - Binding entity from annotated class:
entity.Zakazka
DEBUG Ejb3Column:161 - Binding column DTYPE unique false
DEBUG EntityBinder:292 - Import with entity name=Zakazka
INFO EntityBinder:420 - Bind entity entity.Zakazka on table ZAKAZKY
DEBUG AnnotationBinder:950 - Setting discriminator for entity entity.Zakazka
DEBUG AnnotationBinder:983 - Processing entity.Zakazka property annotation
DEBUG AnnotationBinder:983 - Processing entity.Zakazka field annotation
.....
INFO AnnotationBinder:398 - Binding entity from annotated class:
entity.ZakazkaRozsirene
DEBUG EntityBinder:292 - Import with entity name=ZakazkaRozsirena
DEBUG AnnotationBinder:983 - Processing entity.ZakazkaRozsirena field
annotation
...
Karel
Lukas Barton napsal(a):
Ta query je polymorfni a vy nemate v ResultSetu sloupce pro vsechny
potomky.
Udelejte si predka AbstraktZakazky, ktery bude mit stejne mapovani
jako Zakazky a pak ze Zakazky a ZakazkyRozsirene udelejte jeho potomka.
Potom ta query na Zakazky nebude polymorfni a bude fungovat.
Lukas
Karel Nagy napsal(a):
Dobry den,
v desktopove aplikaci pouzivam jako persitence API Hibernate. Pro
ziskavani dat pouzivam SQLQuery - "cisty" SQL a pridavam addEntity
(Zakazka.class)
Pro jednoduchost mam dve entity - Zakazka a ZakazkaRozsirena, ktera
je zdedena od Zakazka.
Zakazka obsahuje vsechny sloupecky tabulky ZAKAZKY z databaze.
ZakazkaRozsirena ma rozsireny SQL o ruzne sloupecky, ktere ziskavam z
dalsich tabulek, ale protoze puzivam SQL dotazy, tak formou: select
ZAKAZKY.*, (select max(CENA) from OCENENI) as MAX_CENA from ZAKAZKY ...
Pokud spustim kod nize, ve kterem neni vubec pouzita entita
ZakazkyRozsirene - ta je pouze v konfuguracnim souboru, tak to ohlasi
chybu - viz nize. Pokud z konfiguracniho souboru odstranim radek s
mapovanim ZakazkyRozsirene, tak to probehe v poradku.
Nevite v cem by mohla byt chyba? Ja uz to hledam druhy den a nemuzu
na nic prijit
Diky Karel
hibernate.xml
<mapping class="entity.Zakazky"/>
<mapping class="entity.ZakazkyRozsirene"/>
Kod
Configuration configuration = new AnnotationConfiguration
().configure ("hibernate.xml");
SessionFactory sessionFactory = configuration.buildSessionFactory ();
Session session = sessionFactory.openSession ();
SQLQuery q = session.createSQLQuery ("select * from ZAKAZKY");
q.addEntity (entity.Zakazkyy.class);
List<Zakazky> l = q.list ();
session.disconnect ();
sessionFactory.close ();
Chyba
Exception in thread "main"
org.hibernate.exception.GenericJDBCException: could not execute query
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at NewMain.main(NewMain.java:25)
Caused by: org.firebirdsql.jdbc.FBSQLException: Column name DTYPE not
found in result set.
at
org.firebirdsql.jdbc.FBResultSet.findColumn(FBResultSet.java:1059)
at
org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:658)
at
org.firebirdsql.jdbc.FBResultSet.getString(FBResultSet.java:704)
at org.hibernate.type.StringType.get(StringType.java:18)
at
org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at
org.hibernate.type.NullableType.nullSafeGet(NullableType.java:189)
at org.hibernate.loader.Loader.getInstanceClass(Loader.java:1442)
at
org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1284)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
--
_______________________
*Karel Nagy *
*Soma spol. s r.o.*
Tel: /+420 465 350 913/
email: /nagy (at) soma (dot) cz/ <mailto:[EMAIL PROTECTED]>
web: /http://www.soma.cz/
_______________________