In this post, we can learn some important Hibernate - JPA Annotations. The following are the main Annotations which are used in the Hibernate. For Spring annotations, Refer this Spring Annotations.
1) @Entity
1) @Entity
Annotate all your entity beans with @Entity. This contains in the javax.persistence package.
@Entity public class Employee implements Serializable { //properties with setters and getters }
2) @Table
The @Table annotation allows you to specify the details of the table that will be used to persist the entity in the database.
The @Table annotation provides four attributes, allowing you to override the name of the table, its catalog, and its schema, and enforce unique constraints on columns in the table.
@Entity @Table(name = "employee") public class Employee implements Serializable { //properties with setters and getters }
3) @Column
The @Column annotation is used to specify the details of the column to which a field or property will be mapped.
You can use column annotation with the following most commonly used attributes,
- name - attribute permits the name of the column to be explicitly specified.
- length - attribute permits the size of the column used to map a value particularly for a String value
- nullable - attribute permits the column to be marked NOT NULL when the schema is generated
- unique - attribute permits the column to be marked as containing only unique values.
@Entity @Table(name = "employee") public class Employee implements Serializable { @Column(name = "emp_name") private String name; ... }
4) @Id
This annotation specifies that a field is mapped to a primary key column in the table.
Since the column emp_id is a primary key, we have to use this annotation as follows,
@Entity @Table(name = "employee") public class Employee implements Serializable { @Id @Column(name = "emp_id") private int empId; ... }
5) @GeneratedValue
If the values of the primary column are auto-increment, we need to use this annotation to tell Hibernate knows, along with one of the following strategy types: AUTO, IDENTITY, SEQUENCE, and TABLE.
In below example, strategy AUTO implies that the generated values are unique at database level.
@Entity @Table(name = "employee") public class Employee implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "emp_id", updatable = false, nullable = false) ... }
6) @OrderBy
The @OrderBy orders the column values and put into the list as ordered list data. By Default @OrderBy orders the element in ascending order. We need to define property name on the basis of which values will be ordered.
@Entity @Table(name = "employee") public class Employee implements Serializable { @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="address_id") @OrderBy("name") private List<Address> address; ... }
Hibernate Association Mapping Annotations
7) @OneToOne
The @OneToOne annotation is using for mapping between two tables that should be One To One mapping.
The below example illustrates the OneToOne Mapping between Employee and Department Entity.
Employee.java
@Entity @Table(name = "employee") public class Employee implements Serializable { @Id @Column(name = "emp_id") @GeneratedValue private int id; @Column(name="emp_name") private String name; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="dept_id") private Department department; // setters and getters }
Department.java
@Entity @Table(name = "department") public class Department implements Serializable { @Id @Column(name = "dept_id") @GeneratedValue private int id; @Column(name="dept_name") private String name; @OneToOne(mappedBy="department") private Employee employee; // setters and getters }
8) @ManyToOne
The below example illustrates the ManyToOne Mapping between Employee and Address Entity. One Employee can have multiple addresses.
Address.java
@Entity @Table(name = "address") public class Address implements Serializable { @Id @Column(name = "address_id") @GeneratedValue private int id; @Column(name="add_type") private String type; @ManyToOne @JoinColumn(name="emp_id") private Employee employee; // setters and getters }
9) @OneToMany
It's opposite to @ManyToOne. The previous example, One employee can have multiple address so mapping should be OneToMany as below.
Employee.java
@Entity @Table(name = "employee") public class Employee implements Serializable { @Id @Column(name = "emp_id") @GeneratedValue private int id; @Column(name="emp_name") private String name; @OneToMany(mappedBy="employee") private Set<Address> address; // setters and getters }
10) @ManyToMany
It's example of Student and Department association. Many students mapped with many departments using std_id and dept_id.
Student.java
@Entity @Table(name = "student") public class Student { @Id @GeneratedValue (strategy = GenerationType.IDENTITY) @Column(name="std_id") private int id; @Column(name"std_name") private String name; @ManyToMany @JoinTable(name="student_dept", joinColumns = @JoinColumn(name="std_id"), inverseJoinColumns = @JoinColumn(name="dept_id")) private Collection<Department> departments; // Setters and getters .... }
Department.java
@Entity @Table (name="student_dept") public class Department { @Id @GeneratedValue (strategy=GenerationType.IDENTITY) @Column(name="dept_id") private int id; @Column(name="dept_name") private String name; @ManyToMany(mappedBy="departments") private Collection<Student> students; // Setters and getters ... }
Related Post:
1) Advantages of Hibernate over JDBC
2) What are the Core Interfaces of Hibernate framework ?
3) Spring MVC with Hibernate CRUD Example
Nice Blog, When i was read this blog i learnt new things & its truly have well stuff related to developing technology, Thank you for sharing this blog.
ReplyDeleteiphone app training course in bangalore
mobile app training institutes bangalore