Ho un progetto su cui sto lavorando attualmente utilizzando Tomcat, Spring 4, Spring Security, MySQL e JPA w / Hibernate.
Ho scelto JPA dal punto di vista del fatto che si suppone che si possa fare lo swapping dell'implementazione sottostante dei provider ORM senza soluzione di continuità, o almeno meno dolorosa. Direi che questo sta mentalmente usando le specifiche sull'implementazione (JAX-RS) è il punto di vista predefinito della comunità di sviluppo Java.
Sono curioso di sapere se è davvero un compito che vale la pena fare. Sono sicuro che se avessi usato direttamente Hibernate avrei guadagnato un po 'di energia perché potrei usare le funzionalità che non fanno parte delle specifiche JPA principali.
Parte della mia preoccupazione deriva dall'idea di YAGNI. Essenzialmente sto programmando in uno stile e una moda specifici (usando JPA invece di Hibernate) in modo che ad un certo punto in futuro potrò sostituire la mia implementazione ORM. Dubito strongmente che ciò accadrà mai durante la vita del prodotto, quindi essenzialmente sto mettendo lo sforzo in qualcosa che probabilmente non ne trarrò mai i benefici.
Quali sono i tuoi pensieri? Vale la pena "programmare sull'interfaccia" 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 c'è qualcosa che mi piacerebbe avere con il quale sono incorporate le specifiche JPA (i prefissi get / set ai tuoi metodi e la differenza tra MEMBER OF / IN, che solo legandomi a un'implementazione sottostante mi consentirà di evitare.