| 特性 | session.get() | session.load() |
|---|---|---|
| 執行時機 | 立即發送 SQL,查詢數據庫 | 延遲加載,返回代理對象,僅含 ID |
| 性能 | 稍低(未用也查詢) | 較高(按需查詢) |
| 對象不存在 | 返回 null | 拋 ObjectNotFoundException(訪問非 ID 屬性時) |
| 異常場景 | 調用方法觸發 NPE | Session 關閉後訪問觸發 LazyInitializationException |
User user = (User) session.load(User.class, 2); // 無 SQL System.out.println(user.getId()); // 僅輸出 2,無 SQL System.out.println(user.getUsername()); // 此時發送 SQL 查詢
User user = (User) session.get(User.class, 2); // 立即發送 SQL // 若 ID 不存在,user 為 null,後續調用拋 NPE
ObjectNotFoundException:load() 代理對象訪問非 ID 屬性但數據庫無記錄。改用 get() 或捕獲異常。LazyInitializationException:Session 已關閉才訪問代理屬性。解決:確定對象存在且即將使用 → get();僅需 ID 或不確定存在、追求性能 → load() 並注意 Session 生命週期。