Sobes.tech
Junior — Middle

Kas on vajalik, et JPA üksustel oleks hashCode meetod, et tagada korrektne toimimine kogumikes?

sobes.tech AI

Vastus AI-lt

Jah, soovitatav on rakendada hashCode ja equals meetodid JPA üksustel, eriti kui need objektid kasutusele võetakse kogumites nagu HashSet või võtmetena HashMap-is.

Põhjus on selles, et hash-põhised kogumid kasutavad hashCode kiireks otsinguks ja equals objektide võrdlemiseks. Kui need meetodid ei ole õigesti üle kirjutatud, võib kogumite käitumine olla ettearvamatu: näiteks, duplikaadid ei pruugi olla tuvastatavad või objektid ei leia teed.

Tavaliselt implementeeritakse hashCode ja equals unikaalse entiteedi identifikaatori (näiteks id välja) põhjal. Näide:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Entity entity = (Entity) o;
    return id != null && id.equals(entity.id);
}

@Override
public int hashCode() {
    return 31;
}

Oluline on arvestada, et enne id määramist (näiteks enne salvestamist andmebaasi) võib käitumine olla ebastabiilne, seetõttu kasutatakse mõnikord täiendavaid välju või ärilisi võtmeid.