Tôi có một ứng dụng sử dụng Hibernate 4.x và hiện đang sử dụng API Hibernate nguyên bản (có nghĩa là tôi có SessionFactory
và Session
s). Tôi chỉ noticed rằng Tiêu chuẩn API hiện đang phản đối ủng hộ (cấp trên) Tiêu chuẩn API JPA:Tiêu chí/Tiêu chí kiểu JPA Các truy vấn xây dựng từ Hibernate Session
Hibernate cung cấp một già đi, di sản
org.hibernate.Criteria
API mà nên được coi là phản đối. Không có tính năng phát triển nào sẽ nhắm mục tiêu các API đó. Cuối cùng, các tính năng tiêu chí cụ thể của Hibernate sẽ được chuyển thành các phần mở rộng cho JPAjavax.persistence.criteria.CriteriaQuery
.
Tôi không muốn phải chuyển đổi ứng dụng của tôi sang sử dụng EntityManager
trực tiếp (mặc dù nó rất dễ dàng để có được một Hibernate Session
từ đó) bởi vì chúng tôi có một số lượng lớn các tùy chỉnh Hibernate logic cấu hình mà sẽ cần phải được thay thế. Mặc dù vậy, tôi chắc chắn muốn bắt đầu sử dụng API tiêu chí JPA, vì API cũ không được dùng nữa (và có thể sẽ biến mất tại một số điểm ngẫu nhiên trong tương lai, nếu các bản phát hành Hibernate trước đây là bất kỳ dấu hiệu nào) và chúng cũng cung cấp an toàn loại tốt hơn nhiều.
Tôi làm cách nào để sử dụng API CriteriaQuery/CriteriaBuilder mới, nếu tôi đang sử dụng SessionFactory/Session?
Bạn hiện đang nhận phiên của mình như thế nào? Nó ở một vị trí trung tâm? Nếu vậy, bạn sẽ có thể thay đổi điều đó để bạn nhận được các phiên của bạn từ một EntityManager như vậy mà bạn có quyền truy cập vào EM. Vấn đề là Session được sử dụng bởi EntityManager và không phải là cách khác xung quanh.Nhưng nếu bạn sử dụng EntityManager mức cao hơn của bạn và chỉ nhận được Session từ đó (vì vậy bạn không phá vỡ mã cũ), bạn sẽ tốt hơn. –
Đó là một đoạn mã trung tâm, nhưng một phần quan tâm của tôi là chúng tôi có một hệ thống cấu hình khá phức tạp để cấu hình Hibernate (lập trình) và tôi không chắc chắn rằng tôi có thể sao chép với JPA. Nếu tiêu chuẩn Hibernate không được chấp thuận với các Tiêu chuẩn của JPA, nhưng không có cách nào để truy cập nó từ API Hibernate, tôi đã mong đợi rằng họ cũng sẽ không dùng API cấu hình Hibernate (thay vào đó có vẻ như họ đang tiếp tục xây dựng API cấu hình Hibernate) –
Đúng nhưng có vẻ như bạn không thể kết hợp và khớp với JPA và Hibernate theo cách này. Ngay cả khi bạn nhận được cá thể CriteriaQuery mà không có EntityManager, bạn sẽ cần một EM để thực hiện một truy vấn với nó. –