@AttributeOverrides annotation is used in hibernate/JPA to rename the column(s) name of the embadable class while it is being embedded in other class.
Suppose A class is embedded in class B, then if A entity contains the column name of any property "phone", then B entity can override the column name to "mobileNumber". So, in the table, column name will be "mobileNumber".
package entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class ContactKey implements Serializable {
private int roll;
private String sem;
private String branch;
public int getRoll() {
return roll;
}
public void setRoll(int roll) {
this.roll = roll;
}
@Column(name = "sem")
public String getSem() {
return sem;
}
public void setSem(String sem) {
this.sem = sem;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
@Override
public String toString() {
return "ContactKey [roll=" + roll + ", sem=" + sem + ", branch="
+ branch + "]";
}
}
package entity;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity(name="Contact")
@Table(name="Contact")
public class Contact {
@Id
@GeneratedValue
private int id;
@Embedded
@AttributeOverrides(
@AttributeOverride(name="sem",column=@Column(name="semester"))
)
private ContactKey contactKey;
private String name;
private String email;
private long phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
public ContactKey getContactKey() {
return contactKey;
}
public void setContactKey(ContactKey contactKey) {
this.contactKey = contactKey;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
here, database table will not contain the column "sem". It will have the "semester" column since we have overridden in contact entity.
Suppose A class is embedded in class B, then if A entity contains the column name of any property "phone", then B entity can override the column name to "mobileNumber". So, in the table, column name will be "mobileNumber".
package entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class ContactKey implements Serializable {
private int roll;
private String sem;
private String branch;
public int getRoll() {
return roll;
}
public void setRoll(int roll) {
this.roll = roll;
}
@Column(name = "sem")
public String getSem() {
return sem;
}
public void setSem(String sem) {
this.sem = sem;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
@Override
public String toString() {
return "ContactKey [roll=" + roll + ", sem=" + sem + ", branch="
+ branch + "]";
}
}
package entity;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity(name="Contact")
@Table(name="Contact")
public class Contact {
@Id
@GeneratedValue
private int id;
@Embedded
@AttributeOverrides(
@AttributeOverride(name="sem",column=@Column(name="semester"))
)
private ContactKey contactKey;
private String name;
private String email;
private long phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
public ContactKey getContactKey() {
return contactKey;
}
public void setContactKey(ContactKey contactKey) {
this.contactKey = contactKey;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
here, database table will not contain the column "sem". It will have the "semester" column since we have overridden in contact entity.
Comments