ObjectNotFoundException<class lazy="false">,load 也立即檢索public void LazyTest() {
Tb_User u = session.load(Tb_User.class, "1");
// System.out.println(u.getName()); // 觸發查詢
}
true(預設):延遲加載false:立即加載extra:極度延遲,size()/contains() 不初始化集合,只發 SQL 統計指定一次預加載集合元素數量,減少 SQL 次數。
select(預設):單獨查詢subselect:子查詢一次加載所有集合,lazy 有效,batch-size 失效join:左外連接,lazy 失效,HQL 查詢會忽略此設定many-to-one 的 lazy:proxy(延遲)、no-proxy、false(立即)fetch:select 或 joinbatch-size 放在 1 方的 <class> 標籤,非 many-to-oneQuery query = session.createQuery("FROM Tb_User WHERE name = ? AND id = ?");
query.setParameter(0, "1");
query.setParameter(1, "1");
List<Tb_User> list = query.getResultList();
支持位置參數 ? 與命名參數 :name。
query.setFirstResult((pageNo - 1) * pageSize).setMaxResults(pageSize);
在映射文件 <query name="findUserByName"><![CDATA[FROM Tb_User WHERE name = :name]]></query>,代碼調用 session.getNamedQuery("findUserByName")。
// 返回 List<Object[]> SELECT a.id, a.name FROM Tb_User a // 構造函數返回 List<Tb_User> SELECT new Tb_User(a.id, a.name) FROM Tb_User a
SELECT min(a.money), max(a.money) FROM Tb_Order a GROUP BY a.user
LEFT JOIN FETCH:立即初始化集合,可能重複,用 DISTINCT 或 LinkedHashSet 去重LEFT JOIN:返回 Object[],不初始化集合,需映射文件配合INNER JOIN:不返回無匹配記錄(如無訂單用戶)Criteria criteria = session.createCriteria(Tb_User.class);
criteria.add(Restrictions.eq("id", "1"));
Tb_User u = (Tb_User) criteria.uniqueResult();
支持 Conjunction (AND)、Disjunction (OR)、投影統計 Projections.max()、分頁等。
// 查詢
session.createSQLQuery("select * from Tb_User where name = :name")
.setParameter("name", "1").getResultList();
// 執行更新
session.createSQLQuery("insert into Tb_User(id,name) values (:id,:name)")
.setParameter("id", uuid).setParameter("name", uuid).executeUpdate();