Вот как вы должны реализовать объекты данных: наследование не разрешено, только состав.
Это неизменные объекты, но вы можете изменить их, поэтому удалите final
там, где это необходимо.Также вы можете удалить final
из определения класса, потому что Hibernate не поддерживает его, но в этом случае вы должны документально подтвердить, что эти классы не имеют права на наследование.
Основными преимуществами являются все те, которые описаныв Effective Java plus в этом случае вам не нужно управлять наследованием через Hibernate, что иногда может быть настоящей болью.
public final class HolidayPackageVariant {
private final Integer idHolidayPackageVariant;
private final HolidayPackage holidayPackage;
private final String typeHolidayPackage;
...
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof HolidayPackageVariant))
return false;
HolidayPackageVariant that = (HolidayPackageVariant) obj;
return Objects.equal(this.typeHolidayPackage, that.typeHolidayPackage)
&& Objects.equal(this.holidayPackage, that.holidayPackage);
}
@Override
public int hashCode() {
return Objects.hashCode(this.typeHolidayPackage, this.holidayPackage);
}
}
public final class FlightHolidayPackageVariant {
private HolidayPackageVariant holidayPackageVariant;
private Destination originCity;
...
public HolidayPackageVariant asHolidayPackageVariant() {
return this.holidayPackageVariant;
}
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof FlightHolidayPackageVariant))
return false;
FlightHolidayPackageVariant that = (FlightHolidayPackageVariant) obj;
return Objects.equal(this.holidayPackageVariant, that.holidayPackageVariant)
&& Objects.equal(this.originCity, that.originCity);
}
@Override
public int hashCode() {
return Objects.hashCode(this.holidayPackageVariant, this.originCity);
}
}