Code ví dụ Hibernate ID tự tăng (@GeneratedValue, @GenericGenerator).
(Xem thêm: Tự học Hibernate Framework qua code ví dụ)
(Xemtheem: Code ví dụ Hibernate tự sinh ID dạng text, String)
Khi insert data vào database, các primary key (id) bắt buộc phải là duy nhất. Để tiện lợi cho việc này trong Hibernate có cơ chế tự sinh ID giúp lập trình viên khi insert dữ liệu vào database không cần phải cung cấp ID cho object, cũng không cần quan tâm tới vấn đề trùng key.
Các công nghệ sử dụng
Tạo database
CREATE SCHEMA `hibernate-id-auto-increment` ; CREATE TABLE `hibernate-id-auto-increment`.`employee` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, PRIMARY KEY (`id`));
Tạo Maven Project
Thư viện sử dụng
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>stackjava.com</groupId> <artifactId>HibernateIdAutoIncrement</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <hibernate.version>5.3.6.Final</hibernate.version> </properties> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> </dependencies> </project>
File cấu hình hibernate – jpa
Chứa thông tin kết nối tới database (url, username, password), liệt kê các entity class được mapping với các table trong database.
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="persistence"> <description>Demo Hibernate Id Auto Increment</description> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/hibernate-id-auto-increment" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="admin1234" /> <property name="hibernate.show_sql" value="true" /> </properties> </persistence-unit> </persistence>
Trong ví dụ này mình sử dụng entityManager
nên sẽ khai báo file persistence.xml
nếu các bạn sử dụng hibernateSession
thì có thể khai báo file hibernate.cfg.xml
(Xem lại: Code ví dụ Hibernate EntityManager, EntityManagerFactory)
(Xem lại: Code ví dụ Hibernate Session, SessionFactory)
package stackjava.com.hibernatedemo.entities; import javax.persistence.*; @Entity @Table(name = "employee") public class Employee { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name") private String name; // getter - setter - constructor @Override public String toString() { return "Employee [id=" + id + ", name=" + name + "]"; } }
- Ở đây mình sinh ID kiểu số tự tăng với GenerationType là
GenerationType.IDENTITY
- Với GenerationType là IDENTITY nó sẽ sử dụng giá trị AUTO_INCREMENT của mỗi table trên database, khi insert dữ liệu vào table nó sẽ tự động tăng giá trị AUTO_INCREMENT và sử dụng giá trị của AUTO_INCREMENT làm id.
- Với các GenerationType khác như
GenerationType.SEQUENCE
,GenerationType.AUTO
,GenerationType.TABLE
các bạn phải tạo table để chứa giá trị tự tăng trong khi không phải tất cả các database đều hỗ trợ.
Demo
package stackjava.com.hibernatedemo; import javax.persistence.*; import stackjava.com.hibernatedemo.entities.Employee; public class Demo { public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistence"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); Employee emp1 = new Employee("kai"); Employee emp2 = new Employee("sena"); entityManager.persist(emp1); entityManager.persist(emp2); entityManager.getTransaction().commit(); System.out.println(emp1); System.out.println(emp2); entityManager.close(); entityManagerFactory.close(); } }
Kết quả:
kiểm tra lại dữ liệu trong database:
Okay, Done!
Download code ví dụ trên tại đây.
References: