Hibernate 核心 API 与查询方式实战回顾
Hibernate 作为 Java 领域经典的 ORM 框架,其 Session 的生命周期管理和多种查询策略是开发中的基石。下面结合实战代码,梳理几个关键场景,帮助快速重温。
Session 获取实体的差异
get 和 load 都能根据主键获取对象,但行为不同。get 会立即查库,若不存在返回 null;load 默认返回代理对象,访问属性时才查库。注意 session.clear() 后,缓存清空,再次调用 load 会重新发起数据库请求。
// 初始化 Session
Session session = HibernateUtil.currentSession();
// get 方法:立即加载,不存在返回 null
BookInfo bookInfoGet = (BookInfo) session.get(BookInfo.class, 74);
System.out.println("get=>" + bookInfoGet.getBookAuthor());
// load 方法:默认返回代理,按需加载
BookInfo bookInfoLoad = (BookInfo) session.load(BookInfo.class, 74);
System.out.println("load=>" + bookInfoLoad.getBookAuthor());
// 清除缓存后的行为
session.clear();
BookInfo bookInfoLoadTwo = (BookInfo) session.load(BookInfo.class, 74);
System.out.println("clear 后 load=>" + bookInfoLoadTwo.getBookAuthor());
事务控制与对象保存
操作数据库前务必开启事务。保存关联对象时,注意级联关系或手动设置外键。
Department department = new Department();
department.setName("部门 01");
// 构建子部门集合
HashSet<Department> set = new HashSet<>();
Department department2 ();
department2.setPDepartment(department);
department2.setName();
set.add(department2);
department.setDepartments(set);
session.beginTransaction();
session.save(department);
session.flush();
transaction.commit();

