Pokud je todle cele mapovani a vy pouzivate HQL dotaz "from Record", pak mi neni vubec jasne z jakych duvodu hibernate vraci proxy objekty???

Nemate nahodou u tagu hibernate-mapping attribut default-lazy="true"?

Pro Goo GGooo: Todle _neni_ cele mapovani, protoze prave chybi hibernate-mapping tag, kde se da nastavit fura _dulezitych_veci!!

Goo GGooo wrote:
On 1/11/06, Martin Krajci <[EMAIL PROTECTED]> wrote:

Goo GGooo wrote:


resim tady problem s hibernate 3.0. Mam class Record a jeji dva
potomky MessageRecord a Exception Record. Mapovani je zhruba takhle:

<class name="Record">
  <id name="id"><generator class="native" /></id>
  <property name="message" />
</class>

<joined-subclass extends="Record" name="MessageRecord">
  <key column="id" />
  <property name="title" />
</joined-subclass>

<joined-subclass extends="Record" name="ExceptionRecord">
  <key column="id" />
  <property name="severity" />
</joined-subclass>


Pro Jiriho Marese: tohle _je_ cele mapovani. Jen jsem vykuchal nektere
jednoduche <property> ktere na vysledek nemaji vliv.


Vypis tohoto cyklu:
1: class pokus.Record$$EnhancerByCGLIB$$f50d8bc6: Tohle je nejaka
normalni zprava...
2: class pokus.Record$$EnhancerByCGLIB$$f50d8bc6: Tohle je vyjimecna zprava

Jelikoz oba vracene objekty jsou
pokus.Record$$EnhancerByCGLIB$$f50d8bc6 tak na ne nefunguje
"instanceof" a ja nevim ktery je ktery.

Kdyz do query dam "from MessageRecord" tak mi to poctive vrati objekty
pokus.MessageRecord$$enhancer...$$ a "instanceof" funguje, jenze ja
bych chtel vybrat vsechny objekty.

[...]


Problem je asi v tomto: Hibernate vytvoril proxy na Record a preto
nebudete moct pouzit typecast a instanceof operator bude vraciat false,
pretoze sa jedna o proxy na objekt a nie samotny objekt. Hibernate mohol
vytvorit proxy s viacerych dovodou. Jeden z nich moze byt ze Record je
ako lazy="true", alebo dalsi moze byt ze fetch mode nieje eager. Takze
ma napadaju 2 moznosti:

1) pouzit

.setFetchMode(..., FetchMode.EAGER)


Jestli to dobre chapu, tak setFetchMode() muzu pouzit jen pro
Criteria-queries, ne pro HQL. Existuje nejaky ekvivalent v HQL? Navic
pro Criteria to ani nastavovat nemusim, protoze to mi vraci objekty
bez proxy:

Iterator i = session.createCriteria(Record.class).list().iterator();
// funguje bez proxy
Iterator i = session.createQuery("from Record").iterate();  //
nefunguje, objekty s proxy


2) record este raz s DB vytiahnit ked iterujete
session.load(record.getId())


To mi nefunguje. Prvni parametr load() musi byt class, jenze ja z
recordu nepoznam jestli je to MessageRecord nebo ExceptionRecord
instance, takze nevim jak load() zavolat.

Gooo



--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic

Odpovedet emailem