@Entity
@Data
@ToString(exclude = "subEntity")
@EqualsAndHashCode(of = {"idNum", "person", "sourceCode"})
@Table(name = "ANOTHER_SUB_SUB_TABLE")
@IdClass(AnotherSubSubEntity.AnotherSubSubEntityId.class)
public class AnotherSubSubEntity implements Serializable {
@Getter
@Id
@Column(name = "ID_NUM", insertable = false, updatable = false)
private Long idNum;
@Getter
@Id
@Column(name = "PERSON", insertable = false, updatable = false)
private String person;
@Id
@Column(name = "SOURCE_CODE")
private String sourceCode;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ID_NUM", referencedColumnName = "ID_NUM", insertable = false, updatable = false),
@JoinColumn(name = "PERSON", referencedColumnName = "FAMILY_IDENTIFIER", insertable = false, updatable = false)
})
@Id
private SubEntity subEntity;
public void setSubEntity(SubEntity subEntity) {
idNum = Optional.ofNullable(subEntity).map(SubEntity::getMainEntity).map(MainEntity::getIdNum).orElse(null);
person = Optional.ofNullable(subEntity).map(SubEntity::getFamilyIdentifier).orElse(null);
this.subEntity = subEntity;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class AnotherSubSubEntityId implements Serializable {
private Long idNum;
private String person;
private String sourceCode;
}
}