This is the contact class, it's one per person.. contact details change many times and history has to be maintained, hence we've used one to many mapping.
Code:
@Entity
@Table(name = "contact")
public class Contact implements Serializable {
private Long id;
private String createdBy;
private boolean deleted;
private Date creationDate;
private ContactType contactType;
private List<ContactDetails> contactDetails;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CONTACT_SEQ")
@SequenceGenerator(name = "CONTACT_SEQ", sequenceName = "CONTACT_SEQ")
@Column(name = "contact_id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "created_by_emp")
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
@Column(name = "is_deleted")
public boolean isDeleted() {
return deleted;
}
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
@Column(name = "creation_date")
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
@Column(name = "contact_type_id")
@Enumerated(EnumType.STRING)
public ContactType getContactType() {
return contactType;
}
public void setContactType(ContactType contactType) {
this.contactType = contactType;
}
@OneToMany(mappedBy = "contact", fetch = FetchType.LAZY)
@OrderBy("modifiedDate desc")
public List<ContactDetails> getContactDetails() {
return contactDetails;
}
public void setContactDetails(List<ContactDetails> contactDetails) {
this.contactDetails = contactDetails;
}
}
This is the contact details entity, generated each time any property changes..
Code:
public class ContactDetails implements Serializable {
private static final long serialVersionUID = -8983529588217749223L;
private Long id;
private String firstName;
private String lastName;
private String emailAddress;
private String phoneNumber;
private String mobilePhoneNumber;
private String title;
private String modifiedBy;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CONTACT_DETAILS_SEQ")
@SequenceGenerator(name = "CONTACT_DETAILS_SEQ", sequenceName = "CONTACT_DETAILS_SEQ")
@Column(name = "contact_details_id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "first_name")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "email_address")
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
@Column(name = "phone_number")
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Column(name = "mobile_phone_number")
public String getMobilePhoneNumber() {
return mobilePhoneNumber;
}
public void setMobilePhoneNumber(String mobilePhoneNumber) {
this.mobilePhoneNumber = mobilePhoneNumber;
}
@Column(name = "title")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(name = "modified_by_emp")
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
}
How would I map the latest details record to the contact class?