Ho un progetto a cui sto lavorando attualmente utilizzando Tomcat, Spring 4, Spring Security, MySQL e JPA con Hibernate.
Ho scelto JPA dal punto di vista del fatto che si supponga di rendere senza soluzione di continuità, o almeno meno dolorosa, scambiare l'implementazione sottostante dei provider di ORM. Direi che questo utilizza mentalmente le specifiche sull'implementazione (JAX-RS) è il punto di vista predefinito della comunità di sviluppo Java.
Sono curioso di sapere se questo è davvero un compito che vale la pena fare. Sono sicuro che se usassi direttamente Hibernate guadagnerei un po 'di energia perché potrei usare funzionalità che non fanno parte delle specifiche JPA principali.
Parte della mia preoccupazione viene dall'idea di YAGNI. Sto essenzialmente programmando in uno stile e una moda specifici (usando JPA invece di Hibernate) in modo che ad un certo punto in futuro possa scambiare la mia implementazione ORM. Dubito fortemente che accadrà mai durante la vita del prodotto, quindi essenzialmente sto facendo uno sforzo per qualcosa di cui probabilmente non trarrò mai beneficio.
Quali sono i tuoi pensieri? La "programmazione per l'interfaccia" vale la pena quando si tratta di cose come JPA? Hai mai effettivamente scambiato un'intera implementazione ORM in un prodotto? Sei mai stato in grado di evitare completamente l'astrazione da qualcosa come JPA che perde comunque? Personalmente ho già una singola chiamata SQL nativa (per ripulire le tabelle del database), e ci sono alcune cose con cui vorrei futz che sono integrate nelle specifiche JPA (ottenere / impostare i prefissi per i metodi e la differenza tra MEMBER OF / IN, che vincolando solo me stesso a un'implementazione di base mi darà qualche possibilità di evitare.