Sobes.tech
Junior — Middle

Da li je potrebno implementirati metodu hashCode u JPA entitetima za pravilno funkcionisanje u kolekcijama?

sobes.tech АИ

Одговор од АИ

Da, preporučuje se implementacija metoda hashCode i equals u JPA entitetima, posebno ako će ti objekti biti korišćeni u kolekcijama kao što su HashSet ili kao ključevi u HashMap.

Razlog je što kolekcije zasnovane na heširanju koriste hashCode za brzo pronalaženje elemenata i equals za proveru jednakosti objekata. Ako ovi metodi nisu pravilno prepisani, ponašanje kolekcija može biti nepredvidivo: na primer, duplikati možda neće biti otkriveni ili objekti neće biti pronađeni.

Obično, hashCode i equals se implementiraju na osnovu jedinstvenog identifikatora entiteta (npr. polje id). Primer:

@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;
}

Važno je imati u vidu da, pre dodele id (npr. pre čuvanja u bazu podataka), ponašanje može biti nestabilno, zbog čega se ponekad koriste dodatna polja ili poslovni ključevi.