Tôi có một dự án mà tôi đang làm việc hiện đang sử dụng Tomcat, Spring 4, Spring Security, MySQL và JPA w / Hibernate.
Tôi đã chọn JPA từ quan điểm rằng nó giả sử làm cho việc hoán đổi việc triển khai cơ bản của các nhà cung cấp ORM trở nên liền mạch, hoặc ít nhất là ít đau đớn hơn. Tôi muốn nói rằng điều này về mặt tinh thần khi sử dụng thông số kỹ thuật trong quá trình triển khai (JAX-RS) là quan điểm mặc định của cộng đồng phát triển Java.
Tôi tò mò nếu đây thực sự là một nhiệm vụ đáng làm. Tôi chắc chắn rằng nếu tôi sử dụng Hibernate trực tiếp, tôi sẽ có được sức mạnh vì tôi có thể sử dụng các tính năng không phải là một phần của đặc tả chính của JPA.
Một phần mối quan tâm của tôi xuất phát từ ý tưởng của YAGNI. Về cơ bản, tôi đang lập trình theo một phong cách và thời trang cụ thể (sử dụng JPA thay vì Hibernate) để đến một lúc nào đó trong tương lai tôi có thể trao đổi việc triển khai ORM của mình. Tôi hoàn toàn nghi ngờ điều đó sẽ xảy ra trong suốt vòng đời của sản phẩm, vì vậy về cơ bản, tôi đang nỗ lực vào một thứ mà có lẽ tôi sẽ không bao giờ gặt hái được lợi ích.
Quan điểm của bạn là gì? "Lập trình cho giao diện" có đáng không khi nói đến những thứ như JPA? Bạn đã bao giờ thực sự hoán đổi toàn bộ triển khai ORM trong một sản phẩm chưa? Bạn đã bao giờ có thể tránh hoàn toàn sự trừu tượng từ một cái gì đó như JPA bị rò rỉ chưa? Cá nhân tôi đã có một lệnh gọi SQL riêng (đã xóa sạch các bảng cơ sở dữ liệu) và đôi khi tôi muốn sử dụng tính năng này được tích hợp vào đặc tả JPA (lấy / đặt tiền tố cho các phương thức của bạn và sự khác biệt giữa MEMBER OF / IN, chỉ ràng buộc bản thân tôi với một triển khai cơ bản sẽ giúp tôi có bất kỳ cơ hội tránh.