O Hibernate tem uma curva de aprendizado íngreme, mas também tem as seguintes vantagens:
- Inserções/atualizações são mais fáceis devido à "verificação suja". Depois de instalar o serviço, você pode adicionar facilmente novos campos sem alterar uma linha em seu serviço. Você só precisa adicionar novas colunas e preenchê-las e o Hibernate cuidará da parte de persistência.
- O Hibernate pode resolver a "atualização perdida" problema por causa de seu controle de simultaneidade de bloqueio otimista.
- O teste de integração é mais fácil, pois você pode gerar o esquema automaticamente para seu banco de dados na memória (HSQLDB, H2, Derby)
- Ele tem suporte a plug-in de cache (por meio de provedores de cache de 2º nível de terceiros), alguns provedores permitem que você tenha caches "transacionais" e "agrupados".
- Tem um suporte AUDIT integrado (Envers)
Portanto, não é uma solução de persistência 'padrão', pois existem milhões de aplicativos da Web escritos em PHP sem estrutura ORM que estão sendo executados com sucesso na produção.
Eu acho que o Hibernate tem muito mais sentido para aplicativos corporativos onde cache, auditoria, confiabilidade de simultaneidade são requisitos não funcionais obrigatórios.