Java Hibernate Cheat Sheet
Details Hibernate entity mapping annotations, session CRUD operations, HQL and Criteria queries, fetch types, and entity lifecycle states.
3 PagesIntermediateApr 8, 2026
Entity Mapping
Map a Java class to a database table with JPA/Hibernate annotations.
java
@Entity@Table(name = "employees")public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "full_name", nullable = false, length = 100) private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true) private List<Address> addresses = new ArrayList<>(); // getters/setters}
Session & CRUD Operations
Basic Hibernate Session lifecycle and persistence operations.
java
SessionFactory sessionFactory = new Configuration() .configure("hibernate.cfg.xml") .buildSessionFactory();try (Session session = sessionFactory.openSession()) { Transaction tx = session.beginTransaction(); Employee emp = new Employee(); emp.setName("Ada Lovelace"); session.persist(emp); // INSERT Employee found = session.get(Employee.class, 1L); // SELECT by id found.setName("Ada L."); // dirty checking auto-updates on flush session.remove(found); // DELETE tx.commit();}
HQL & Criteria API
Query entities with HQL and the type-safe Criteria API.
java
// HQL (object-oriented, entity/field names, not table/column names)List<Employee> results = session.createQuery( "FROM Employee e WHERE e.department.name = :dept", Employee.class) .setParameter("dept", "Engineering") .list();// Criteria API (type-safe, JPA standard)CriteriaBuilder cb = session.getCriteriaBuilder();CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);Root<Employee> root = cq.from(Employee.class);cq.select(root).where(cb.equal(root.get("name"), "Ada L."));List<Employee> list = session.createQuery(cq).getResultList();
Fetch Types & Cascade Options
Control how associated entities are loaded and propagated.
- FetchType.LAZY- Load the association only when accessed; default for @OneToMany/@ManyToMany.
- FetchType.EAGER- Load the association immediately with the parent; default for @ManyToOne/@OneToOne.
- CascadeType.PERSIST- Saving the parent also saves associated child entities.
- CascadeType.REMOVE- Deleting the parent also deletes associated children.
- CascadeType.ALL- Applies PERSIST, MERGE, REMOVE, REFRESH, and DETACH to associations.
- orphanRemoval- Automatically deletes child entities removed from the parent's collection.
Entity Lifecycle States
The states an entity moves through in the persistence context.
- Transient- New object not associated with a Session and not saved in the DB.
- Persistent (Managed)- Associated with an active Session; changes are tracked and auto-flushed.
- Detached- Was persistent but the Session closed; changes are no longer tracked.
- Removed- Scheduled for deletion in the current transaction.
- Flush- Synchronizes in-memory persistence-context changes to the database, automatically before commit/queries or manually via session.flush().
- Merge (Reattachment)- session.merge(detachedEntity) copies a detached entity's state onto a managed instance, reattaching it to the persistence context.
Pro Tip
Watch out for the N+1 select problem with lazy associations accessed in a loop - fix it with a JOIN FETCH in HQL/JPQL or @EntityGraph rather than switching everything to EAGER.
Was this cheat sheet helpful?
Explore Topics
#JavaHibernate#JavaHibernateCheatSheet#Programming#Intermediate#EntityMapping#SessionCRUDOperations#HQLCriteriaAPI#Fetch#Databases#CheatSheet#SkillVeris
Advertisement
Sri Hayavadhana Info-Tech
Professional Web Designing Services
- Responsive Websites
- E-commerce Solutions
- SEO Friendly Design
- Fast & Secure
- Support & Maintenance