Dobry den,

 Rozhodne bych nerekl, ze se jedna o off-topic prispevek.

 Ja osobne nejsem nijak extra velkym priznivcem Hibernace, ale to je spise tim 
ze se pohybuji mimo webove CRUD aplikace. Dokud je naprostou vetsinu SQL dotazu 
tvori jednoduche selecty, inserty a updaty, tak je hibernate naprosto skvela 
vec. U aplikaci pouzivajicich slozitejsi praci s databazi uz se to zacina 
komplikovat, protoze nakonec stejne skoncim u toho ze ty dotazy musim psat 
rucne aby byl pouzity nejaky rozumny query plan. 

 Jenomze... rucni psani SQL take neni zadna sranda a lze narazit. Treba zrovna 
uvedeny priklad: jednoduchy SQL join, na tom snad nic zkazit nelze, nebo ano?
 Ano: pokud by tabulka computers obsahovala opravdu velke mnozstvi zaznamu (o 
mnoho radu vice nez operating_systems), tak se zcela zbytecne prenasi hodnoty z 
operating_systems. To je obzvlaste nebezpecne v kombinaci s *, protoze staci 
aby se tam postupne pridavaly sloupce (pokud mozno VARCHAR) a rezijni naklady 
na prenos dat zacnou byt znat. Navic se jedna o problem ktery se vyskytne jen v 
pripade distribuovaneho nasazeni (tj. databaze neni na stejnem stroji jako 
aplikace) a s velkym objemem dat - tedy pravdepodobne produkce.
 V tomto konkretnim pripade se tedy naopak muze vyplatit provest dva dotazy. 
Navic obsah tabulky operating_systems se pravdepodobne meni jen jednou za 
uhersky rok, takze se vyplati ji mit celou dobu v nejake cache v pameti.

 Kazdopadne, musim na 120% souhlasit s obecnou obavou pred blackboxem. I kdyz 
zrovna Hibernate az tak docela blackbox neni (opensource).

Kamil Podlesak

> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]]on Behalf Of Dusan Zatkovsky
> Sent: Tuesday, March 10, 2009 4:01 PM
> To: Java
> Subject: Re: OT: JPA - mapování císelníku
> 
> 
> Dobry den.
> 
> Ospravedlnte prosim trosku offtopic prispevok.
> 
> Ako zacinajucemu javistovi mi viaceri ludia odporucali 
> pouzivat hibernate. Ja 
> o tom projekte neviem skoro nic, zhruba chapem principy. Dost 
> sa ( ako byvali 
> C++-kar ) bojim ist do nejakeho podobneho blackboxu, pretoze 
> mam (opravnene*) 
> pochybnosti o performance takehoto riesenia.
> 
> Uvedeny priklad mi padol do oka, pretoze by mi mohol nacrtnut 
> situaciu okolo 
> hibernate performance. To, co Pavel chce urobit pomocou 
> hibernate, sa da na 
> urovni sql elegantne riesit pomocou sql join-u.
> 
> Hrozne by ma zaujimalo, ake sql prikazy vygeneruje hibernate 
> pri dotaze na 
> zaznam z tabulky computers. Ci pouzije join, alebo bude len 
> trapne selectovat 
> z dvoch tabuliek. Pavle, nemohol by ste mi sem potom nejake 
> sql dotazy z 
> hibernate pastnut, ked to budete testovat?
> 
> Diky.
> 
> 
> * nerad by som kohokolvek urazil, ale reci o tom ako je hw 
> lacny a blablabla 
> pridame pamat, procesor, disk pocuvam od skusenych javistov v 
> jednom kuse. 
> Konkretne o hibernate som sa bavil s jednym javistom vcera a 
> jeho nazory 
> vyzneli v tom duchu, ze kasleme na sql ficury, hlavne ze je to rychlo 
> vyvinute. To ma vacsinou rozseka a stratim argumenty :-)
> 
> sql join:
> 
>   create table operating_systems ( id serial unique, name text ); 
>   create table computers ( id serial unique, name text, idos integer \
>   references operating_systems(id) );
> 
>   select * from computers join operating_systems on computers.idos =\
>   operating_systems.id; 
> 
> 
> 
> > Vytvorit entitu:
> >
> > @Entity
> > @Table(name = "operating_systems")
> > public class OperatingSystem {
> >     Long id;
> >     String name;
> >
> >     @Id
> >     @GeneratedValue(strategy=GenerationType.IDENTITY)
> >     @Column(name = "id")
> >     Long getId();
> >     .
> >     .
> >     .
> >     @Basic
> >     @Column (name="name")
> >     String getName();
> >     .
> >     .
> >     .
> > }
> >
> > a ve tride Computer dodat:
> >
> > protected OperatingSystem operatingSystem;
> >
> > @ManyToOne (cascade=CascadeType.REFRESH, fetch=FetchType.EAGER,
> > optional=true)
> > @JoinColumn(name="operating_system")
> > public OperatingSystem getOperatingSystem();
> > .
> > .
> > .
> > Vice se doctete napriklad zde :
> > http://www.hibernate.org/hib_docs/annotations/reference/en/html/
> >
> > Jaroslav Hurdes
> >
> > Pavel Zelenka napsal(a):
> > > Zdravím,
> > >
> > > pro vysvětlení toho čeho chci dosáhnout :
> > >
> > > mám tabulku COMPUTER, která reprezentuje např. počítače 
> ve firmě, s
> > > položkami ID, NAME, IDOS
> > > dále mám tabulku OS, což je čísleník známých operačních systémů, s
> > > položkami IDOS, OSNAME
> > >
> > > zajímalo by mě, jak při mapování entity zajistit dotažení názvu
> > > operačního systému.
> > >
> > > @Entity
> > > @Table(name = "computer")
> > > public class Computer implements Serializable {
> > >     @Id
> > >     @GeneratedValue(strategy=GenerationType.IDENTITY)
> > >     @Column(name = "id")
> > >     private Integer id;
> > >     @Column(name="name")
> > >     private String computerName;
> > >
> > > a tady dál už bych potřeboval poradit.
> > >
> > >
> > > Díky
> > >
> > > Pavel Zelenka
> 
> 
> 
> -- 
> Dusan
> 

Odpovedet emailem