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

        ComplexObject that = (ComplexObject) o;

        if (longValue != that.longValue) return false;
        if (!firstAggregate.equals(that.firstAggregate)) return false;
        if (!listOfAggregates.equals(that.listOfAggregates)) return false;
        if (!listOfValues.equals(that.listOfValues)) return false;
        if (!stringValue.equals(that.stringValue)) return false;

        return true;
    }