Mam projekt, nad którym obecnie pracuję, używając Tomcat, Spring 4, Spring Security, MySQL i JPA w / Hibernate.
Wybrałem JPA z punktu widzenia, że zamienianie podstawowej implementacji dostawców ORM jest płynne, a przynajmniej mniej bolesne. Powiedziałbym, że to mentalne użycie specyfikacji nad implementacją (JAX-RS) jest domyślnym punktem widzenia społeczności programistów Java.
Jestem ciekawy, czy to naprawdę warto zrobić. Jestem pewien, że gdybym użył Hibernacji bezpośrednio, zyskałbym trochę mocy, ponieważ mógłbym używać funkcji, które nie są częścią głównej specyfikacji JPA.
Część moich obaw wynika z pomysłu YAGNI. Zasadniczo programuję w określonym stylu i modzie (używając JPA zamiast Hibernacji), aby w pewnym momencie w przyszłości mogłem zamienić moją implementację ORM. Poważnie wątpię, aby kiedykolwiek wydarzyło się to przez cały okres użytkowania produktu, więc zasadniczo wkładam wysiłek w coś, z czego prawdopodobnie nigdy nie skorzystam.
Jakie są Twoje myśli? Czy warto „programować do interfejsu”, jeśli chodzi o takie rzeczy jak JPA? Czy kiedykolwiek zamieniłeś całą implementację ORM w produkcie? Czy kiedykolwiek udało ci się całkowicie uniknąć abstrakcji po przeciekaniu przez JPA? Ja osobiście mam już jedno natywne wywołanie SQL (aby wyczyścić tabele bazy danych) i jest coś, z czym chciałbym skorzystać, które są wbudowane w specyfikację JPA (pobierz / ustaw prefiksy do twoich metod i różnicę między MEMBER OF / IN, które wiążąc się tylko z bazową implementacją, pozwolą mi uniknąć.