Hibernate ha una curva di apprendimento ripida ma presenta anche i seguenti vantaggi:
- L'inserimento/gli aggiornamenti sono più facili grazie al "controllo sporco". Una volta che hai il servizio in atto, puoi facilmente aggiungere nuovi campi senza modificare una riga nel tuo servizio. Devi solo aggiungere nuove colonne e popolare quelle e Hibernate si occuperà della parte di persistenza.
- L'ibernazione può risolvere il "aggiornamento perso" problema a causa del controllo ottimistico della concorrenza di blocco.
- Il test di integrazione è più semplice, poiché puoi generare automaticamente lo schema per il tuo database in memoria (HSQLDB, H2, Derby)
- Ha un supporto per plug-in di memorizzazione nella cache (tramite provider di memorizzazione nella cache di 2° livello di terze parti), alcuni provider ti consentono di avere cache sia "transazionali" che "cluster".
- Ha un supporto AUDIT integrato (Envers)
Quindi non è una soluzione di persistenza "predefinita", poiché ci sono milioni di app Web scritte in PHP senza framework ORM che vengono eseguite correttamente in produzione.
Penso che Hibernate abbia molto più senso per le applicazioni aziendali in cui la memorizzazione nella cache, il controllo e l'affidabilità della concorrenza sono requisiti non funzionali obbligatori.