zdravim konferenciu,
neviem ci je to tym ze som sa to snazil rozchodit celu noc, ale nevie
nahodou niekto ako toto presne popisat v triedach a anotaciach, cital
som podobny problem co riesil Maaartin
http://forum.fotografovani.cz/read.php?14,2167592,2209867,quote=1 ale
ani to velmi nepomohlo. snazim sa to riesit pomocou
"map-key-many-to-many". pan Tejnora napisal nasledovne riesenie tohoto
problemu:
mam tabulku zakladnych vlastnosti napr. domu t_house, kde mam id, nazov
domu, ulicu, .... chcem vytvorit dalsiu tabulku kde chcem definovat
ciselnik "dodatocnych" vlastnosti domu, napr. t_property_house, kde mam
id, nazov a typ vlastnosti (int, dec, bool, date, ....) napr.
id nazov typ
1 "pocet izieb" int
2 "vlastne kurenie" bool
a poslednu tabulku,kde chcem zapisovat konkretne jednotlive dodatocne
vlastnosti definovanych domov (domov ktore boli definovane v tabulke
t_house), napr. t_property_house_value, kde bude id vlastnosti (cudzi
kluc do t_property_house), id domu (cudzi kluc do t_house) a stlpce pre
jednotlive mozne typy, teda stlpec value_integer typu int, value_dec
typu float, value_bool typu boolean, atd.).
riesenie:
Karel Tejnora wrote / napísal(a):
Hi,
takze dekompozice tercialni vztahu na entity pres pomocnou entitu co ma
dve vlastnosti.
trida Dum (tabulka t_house)
{ List<HodnotaVlastnostiDomu> vlastnostiDomu }
trida TypVlastnostiDomu { nazev=Bool } { nazev=Text }, ...
trida VlastnostDomu { nazev text, TypVlastnostiDomu typ }
trida HodnotaVlastnostiDomu { VlastnostDomu, Dum }
Dum-1:n-HodnotaVlastnostiDomu-m:1-VlastnostDomu-k:1-TypVlastnostiDomu
http://www.hibernate.org/hib_docs/v3/reference/en/html/collections.html#collections-ternary
nebo pomoci komponent - ty maji jeden problem - nesdili se.
Takze objekt HodnotaVlastnostiDomu h1,h2 po nacteni z DB nebude platit
h1.getVlastnostDomu()==h2.getVlastnostDomu() (nutno implementovat
vlastni equals a vzdycky budete porovnavat nazev a typ)
http://www.hibernate.org/hib_docs/v3/reference/en/html/components.html
TypVlastnostiDomu je vlastne vyctovy typ.
A ted je tu takovej problem s OOP - nahrava to tomu, aby trida
VlastnostDomu byla abstraktni, protoze TypVlastnostiDomu je omezeny, tj.
BoolVlastnostDomu extends VlastnostDomu { } - bude reprezentovany
checkboxem TextVlastnostDomu bude polem
to zaridi:
interface VlastnostDomuPrinter {
print(BoolVlastnostDomu);
print(TextVlastnostDomu) ...
}
class HTMLPrinter implements VlastnostDomuPrinter {
print(BoolVlastnostDomu) { ... }
... }
aby jsme mohli udelat for(VlastnostDomu vlastnostDomu :
dum.getVlastnostiDomu()) { printer.print(vlastnostDomu) }
A pokud chcete pouzivat napr. JSTL - no neni to fanda OOP, takze je
dobre namapovat discriminator na vlastnost (update=false, insert=false).
Tak asi tak.
Karel
__________ Informacia od NOD32 2549 (20070925) __________
Tato sprava bola preverena antivirusovym systemom NOD32.
http://www.eset.sk
dakujem
Ivan