Ich habe ein Projekt, an dem ich gerade arbeite und das Tomcat, Spring 4, Spring Security, MySQL und JPA mit Ruhezustand verwendet.
Ich habe JPA unter dem Gesichtspunkt ausgewählt, dass es wahrscheinlich ist, die zugrunde liegende Implementierung von ORM-Anbietern nahtlos oder zumindest weniger schmerzhaft auszutauschen. Ich würde sagen, dass dies die mentale Verwendung der Spezifikation über die Implementierung (JAX-RS) ist der Standardstandpunkt der Java-Entwicklergemeinschaft.
Ich bin gespannt, ob sich das wirklich lohnt. Ich bin sicher, wenn ich Hibernate direkt verwenden würde, würde ich etwas an Leistung gewinnen, da ich Funktionen verwenden könnte, die nicht Teil der JPA-Hauptspezifikation sind.
Ein Teil meiner Sorge kommt von der Idee von YAGNI. Ich programmiere im Wesentlichen auf eine bestimmte Art und Weise (mit JPA anstelle von Hibernate), damit ich irgendwann in der Zukunft meine ORM-Implementierung austauschen kann. Ich bezweifle sehr, dass dies jemals während der gesamten Lebensdauer des Produkts passieren wird, und bin daher im Grunde genommen bemüht, etwas zu tun, von dem ich wahrscheinlich nie profitieren werde.
Was sind deine Gedanken? Lohnt es sich, "an der Schnittstelle zu programmieren", wenn es um Dinge wie JPA geht? Haben Sie jemals eine komplette ORM-Implementierung in einem Produkt ausgetauscht? Konnten Sie jemals die Abstraktion von etwas wie JPA, das sowieso ausläuft, vollständig vermeiden? Ich persönlich habe bereits einen einzigen nativen SQL-Aufruf (um die Datenbanktabellen zu bereinigen), und es gibt Dinge, mit denen ich gerne etwas anfangen möchte, die in die JPA-Spezifikation integriert sind (get / set-Präfixe für Ihre Methoden und der Unterschied zwischen MEMBER OF) / IN, das mich nur an eine zugrunde liegende Implementierung bindet, gibt mir die Möglichkeit, das zu vermeiden.