JPA map class Java ↔ bảng DB qua annotation — không viết SQL DDL thủ công.
java
@Entity @Table(name = "users")
class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@Column(nullable = false, length = 100) private String name;
@Column(unique = true) private String email;
}@Entity— class là JPA entity (1 bảng);@Table— tên bảng.@Id— khóa chính;@GeneratedValue— cách sinh ID (IDENTITYauto-increment phổ biến,SEQUENCE,UUID).@Column— ràng buộc cột (nullable, length, unique).
Quan hệ:
java
@ManyToOne(fetch = FetchType.LAZY) // nhiều order thuộc 1 user
@JoinColumn(name = "user_id") private User user;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> items;@JoinColumn = cột FK; mappedBy = bên không sở hữu quan hệ (tránh bảng join thừa); fetch = LAZY mặc định để tránh N+1.
Lưu ý: GenerationType.IDENTITY khiến Hibernate không batch insert được — production tải cao thường dùng SEQUENCE.