Household.java
package uk.gov.dhsc.htbhf.hmrc.entity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import static java.util.Collections.unmodifiableSet;
@Entity
@Data
@Builder(toBuilder = true)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
@Table(name = "hmrc_ctc_household")
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
public class Household extends BaseEntity {
@Size(min = 1, max = 50)
@Column(name = "household_identifier")
private String householdIdentifier;
@Column(name = "file_import_number")
private Integer fileImportNumber;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "household", orphanRemoval = true)
@ToString.Exclude
private final Set<Adult> adults = new HashSet<>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "household", orphanRemoval = true)
@ToString.Exclude
private final Set<Child> children = new HashSet<>();
public Household addAdult(Adult adult) {
adult.setHousehold(this);
this.adults.add(adult);
return this;
}
public Set<Adult> getAdults() {
return unmodifiableSet(adults);
}
public void setAdults(Set<Adult> adults) {
this.adults.clear();
adults.forEach(this::addAdult);
}
public Household addChild(Child child) {
child.setHousehold(this);
this.children.add(child);
return this;
}
public Set<Child> getChildren() {
return unmodifiableSet(children);
}
public void setChildren(Set<Child> children) {
this.children.clear();
children.forEach(this::addChild);
}
}