If more than once we have to use the same Embedded object, then we have to use @Attributeoverrides and @AttributeOverride annotations to give override the column names of the embedded objects. Otherwise, we get a error like this : "org.Hibernate.MappingException: Repeated column in mapping entry:" for all the columns of the Embedded objects that have been repeated.
For example, if Name is a Embedded object in Student Entity, then the mapping should be like this
For example, if Name is a Embedded object in Student Entity, then the mapping should be like this
@Entity
public class Student implements Serializable {
@AttributeOverrides({
@AttributeOverride(name = "firstName", column = @Column(name = "FATHER_FIRST_NAME")),
@AttributeOverride(name = "surName", column = @Column(name = "FATHER_SUR_NAME")),
@AttributeOverride(name = "lastName", column = @Column(name = "FATHER_LAST_NAME")),
@AttributeOverride(name = "displayName", column = @Column(name = "FATHER_DISPLAY_NAME")) })
@Embedded
private Name father;
@AttributeOverrides({
@AttributeOverride(name = "firstName", column = @Column(name = "MOTHER_FIRST_NAME")),
@AttributeOverride(name = "surName", column = @Column(name = "MOTHER_SUR_NAME")),
@AttributeOverride(name = "lastName", column = @Column(name = "MOTHER_LAST_NAME")),
@AttributeOverride(name = "displayName", column = @Column(name = "MOTHER_DISPLAY_NAME")) })
@Embedded
private Name mother;
...
}
And Embeddable object'r mapping being:
@Embeddable
public class Name implements Serializable {
/**
* Default generated Serialization ID
*/
private static final long serialVersionUID = -971064645279229579L;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "SUR_NAME")
private String surName;
@Column(name = "LAST_NAME")
private String lastName;
...
}