Example of @MapsId in Hibernate
May 19, 2013
@MapsId in hibernate annotation maps a column with another table's column. @MapsId works with @Id and @EmbeddedId.
Student.java
package com.concretepage.persistence; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.MapsId; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name="student") public class Student implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="sl_id") private int slNum; @MapsId @OneToOne @JoinColumn(name = "std_id") private Person student; @Column(name="location") private String location; public Student(int slNum,Person student, String location){ this.slNum=slNum; this.student=student; this.location=location; } public Person getStudent() { return student; } public void setStudent(Person student) { this.student = student; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public int getSlNum() { return slNum; } public void setSlNum(int slNum) { this.slNum = slNum; } }
package com.concretepage.persistence; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="person") public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="p_id") private int id; @Column(name="first_name") private String firstName; @Column(name="last_name") private String lastName; public Person(int id, String firstName,String lastName){ this.id=id; this.firstName=firstName; this.lastName=lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
package com.concretepage.util; import java.util.Properties; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import com.concretepage.persistence.Person; import com.concretepage.persistence.Student; public class HibernateUtil { private static final SessionFactory concreteSessionFactory; static { try { Properties prop= new Properties(); prop.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate"); prop.setProperty("hibernate.connection.username", "root"); prop.setProperty("hibernate.connection.password", ""); prop.setProperty("hibernate.hbm2ddl.auto", "update"); prop.setProperty("show_sql", "true"); prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect"); concreteSessionFactory = new AnnotationConfiguration() .addPackage("com.concretepage.persistence") .addProperties(prop) .addAnnotatedClass(Person.class) .addAnnotatedClass(Student.class) .buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static Session getSession() throws HibernateException { return concreteSessionFactory.openSession(); } public static void main(String... args) { Session session = getSession(); session.beginTransaction(); Person p= new Person(1,"naresh", "rai"); session.save(p); Student s= new Student(1,p, "varanasi"); session.save(s); session.getTransaction().commit(); session.close(); } }