Hibernate Component Mapping Annotation
Component dependent object:
A component is a contained object that is persisted as a value type and not an entity reference. The term “component” refers to the object-oriented notion of composition and not to architecture-level components.
Historically Hibernate called these components. JPA calls them embeddables. Either way the concept is the same: a composition of values. For example we might have a Name class that is a composition of first-name and last-name, or an Address class that is a composition of street, city, postal code, etc.
The @Embeddable annotation is used to specify embeddable types. Like basic types, embeddable types do not have any identity, being managed by their owning entity.
The @Embedded annotation is used to specify that a given entity attribute represents an embeddable type.
Component Annotation @Embedded mapping
package com.vaannila.student; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "student") public class Student { private long studentId; private String studentName; private Address studentAddress; public Student() { } public Student(String studentName, Address studentAddress) { this.studentName = studentName; this.studentAddress = studentAddress; } @Id @GeneratedValue @Column(name = "STUDENT_ID") public long getStudentId() { return this.studentId; } public void setStudentId(long studentId) { this.studentId = studentId; } @Column(name = "STUDENT_NAME", nullable = false, length = 100) public String getStudentName() { return this.studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } @Embedded public Address getStudentAddress() { return this.studentAddress; } public void setStudentAddress(Address studentAddress) { this.studentAddress = studentAddress; } }
Address.java
package com.vaannila.student; import javax.persistence.Column; import javax.persistence.Embeddable; @Embeddable public class Address { private String street; private String city; private String state; private String zipcode; public Address() { } public Address(String street, String city, String state, String zipcode) { this.street = street; this.city = city; this.state = state; this.zipcode = zipcode; } @Column(name = "ADDRESS_STREET", nullable = false, length = 250) public String getStreet() { return this.street; } public void setStreet(String street) { this.street = street; } @Column(name = "ADDRESS_CITY", nullable = false, length = 50) public String getCity() { return this.city; } public void setCity(String city) { this.city = city; } @Column(name = "ADDRESS_STATE", nullable = false, length = 50) public String getState() { return this.state; } public void setState(String state) { this.state = state; } @Column(name = "ADDRESS_ZIPCODE", nullable = false, length = 10) public String getZipcode() { return this.zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } }
Saving Objects to Component mapping
public void insertStudent(Student student) { Session s = getSession(); Transaction transaction = s.beginTransaction(); s.save(student); transaction.commit(); }
Retrieving Objects from Component Mapping (session.get())
public Student getStudent(long id) { Student sd = null; Session s = getSession(); sd = (Student) s.get(Student.class, id); return sd; }