Hibernate 副標題「符合 Java 慣例的 O/R 持久化」一語道破天機:傳統三層架構中,資料庫端是基於行集的 E/R 模型,而 Java 端是純粹的物件導向(OO)。這種 OO vs E-R 的根本不統一,導致在 Web 介面上難以實現 C/S 模式下直觀的「Master-Detail」「Lookup」等關聯交互。
EJB 早期嘗試封裝 Entity Bean,但笨重難用。Hibernate 以 POJO 持久化為核心,將繼承樹與表結構對應做到極致:Hibernate 2 支援單表對應整棵繼承樹、或每類一表;Hibernate 3 引入 <join> 標記,靈活實現基類共表或子類分表。映射檔中的 one-to-many、many-to-one 直接對應業務上的 Master-Detail、Lookup 關係,完成了資料端的語義統一。
伺服器端已習慣用 POJO 建模(訂單、客戶、產品),但 Web Client 端(HTML/JavaScript)僅處理頁面提交/回饋流程。Struts/WebWork 等 MVC 框架無法幫助分析客戶端業務邏輯,例如「新建訂單時,選擇客戶後判斷預收款是否足夠」,程式設計師腦中仍是 input tag、model、action 處理、再渲染下一頁——表現層代碼與伺服器端語義嚴重脫節。
為解決多次頁面刷新,嘗試將業務邏輯下沉客戶端(JavaScript+XMLHttp/Web Service、Applet、Office 平台),卻面臨:
JSF 有望成為備選方案,但需更豐富的表現層控件。未來突破點在二:一是設計層面的 MDA(模型驅動架構);二是具體實現層面,能否將 Model 定義直接帶入表現層,JSF 與 .NET 將展開新一輪競爭。