Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Hibernate] Identitet objekata (equals)

[es] :: Java :: [Hibernate] Identitet objekata (equals)

[ Pregleda: 1579 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anon315

Član broj: 315
Poruke: 1657
*.adsl-1.sezampro.yu.



+13 Profil

icon [Hibernate] Identitet objekata (equals)09.03.2008. u 13:12 - pre 196 meseci
Aj da malo popricamo o tome kako implementirate equals metodu u domain modelu :)

1) Jasno je da nema logike testirati kolekcije. Medjutim, sta ako imam situaciju da A ima mapirano B kao kolekciju komponenti. Dakle, A je odgovoran za zivotni ciklus B, iako B ima svoju tabelu. Takodje, smatram da su mi A1 i A2 jednaki ako imaju isti set B. Jednostavno ako ne poredim ta dva seta, nisam siguran da su mi A1 i A2 isti. U ovoj situaciji sam ukljucio poredjenje setova u equals, sto smatram da nije problem, jer mi setovi ne sadrze objekat A, tako da nemam rizik od cirkulacije i stack overflowa. Kako vi resavate ovaj problem?

2) Preporuka je da se prepozna business key i da se samo polja koja ga cine testiraju. Medjutim, postoje situacije kada jednostavno sva polja moram da testiram. Na primer, ne postoji nikakav unique constraint u toj tabeli itd. Tada ukljucujem sva polja. Vi?

3) Sta sa podklasama?

Code:

 // Nadklasa X
 public boolean equals(Object o) {
        if(this == o) {
            return true;
        }

        if(o == null || getClass() != o.getClass()) {
            return false;
        }

        final X x = (X)o;
        // Provere
        return true;


Code:

 // Podklasa Y (Y extends X)
 public boolean equals(Object o) {
        if(!super.equals(o)) {
            return false;
        }

        final Y y = (Y)o;
        // Provere polja iz Y
        return true;
    }


Citam (vezano za Hibernate) da u 99% slucajeva nije korektno da se u podklasi ukljuce nova polja za testiranje zato sto je, navodno, tesko zadovoljiti i simetricnost i tranzitivnost i zato sto business key mozda ne odgovara dobro definisanom kandidat prirodnom kljucu u DB (podklase su mi mapirane na nove tabele). A jednostavno smatram da je Y1 isto kao i Y2 ako i samo ako su im i novo dodata polja (u odnosu na nadklasu) ista. Kako vi radite?

4) Sad jedna protivrecnost. Do sada sam poredio direktno instance varijable u equals metodama zato sto zelim da testiram pravu vrednost varijable, a ne (mozda) nesto sto je nastalo dodatnim ponasanjem kroz geter (na primer default vrednost ako je varijabla null i slicno). Ovo je dobra praksa. Medjutim kada se uzme u obzir Hibernate, ovde se stvari menjaju jer je moguce da je argument koji je predat equals metodi ustvari proxy objekat, a ne instanca objekta koja ima perzistentno stanje. U ovom slucaju mora da se ide kroz geter da bi se proxy inicijalizovao. Kakva su vam ovde iskustva i praksa?

V
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl-a-1.sezampro.yu.



+13 Profil

icon Re: [Hibernate] Identitet objekata (equals)11.03.2008. u 08:23 - pre 196 meseci
http://forum.javasvet.net/viewtopic.php?t=72
 
Odgovor na temu

[es] :: Java :: [Hibernate] Identitet objekata (equals)

[ Pregleda: 1579 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.