2016-07-19 14 views
16

Như chúng ta đã biết, truy vấn tiêu chí không được dùng nữa trong Hibernate 5. Đó là một tính năng hữu ích trong các phiên bản trước của Hibernate. Và nó vẫn hoạt động tốt hơn HQL.Tại sao truy vấn tiêu chí bị phản đối trong Hibernate 5?

Vì vậy, lý do không được dùng trong Hibernate 5 là gì?

Và câu hỏi này cũng không trùng lặp với số this question vì tôi muốn biết lý do từ chối truy vấn tiêu chí.

Đây là từ here.

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ẽ là được chuyển thành tiện ích mở rộng cho JPA javax.persistence.criteria.CriteriaQuery. Để biết chi tiết về API org.hibernate.Criteria, hãy xem Truy vấn tiêu chí kế thừa cũ.

+0

Có thể trùng lặp [Hibernate 5 và Truy vấn tiêu chí đánh máy (JPA2)] (http://stackoverflow.com/questions/35824417/hibernate-5-and-typed-criteria-queries-jpa2) –

+0

Từ [tài liệu] (https://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/apb.html): _ "Phát triển mới nên tập trung vào API JPA' javax.persistence.criteria.CriteriaQuery'. 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 JPA 'javax.persistence.criteria.CriteriaQuery'." _ Ngoài ra, nếu bạn muốn viết các truy vấn dễ đọc (thay vì sử dụng API Tiêu chí clunky), hãy xem xét [QueryDSL] (http://www.querydsl.com/). –

+0

@MickMnemonic Không hoàn toàn trùng lặp. Tôi đã chỉnh sửa câu hỏi của mình. –

Trả lời

8

Chúng tôi không chấp nhận API tiêu chí thay cho hỗ trợ tiện ích mở rộng JPA.

Hãy xem xét điều này:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
HibernateCriteria hc = cb.unwrap(HibernateCriteria.class); 
... 
query.where(hc.someAwesomeThing(...)); 
List<SomeEntity> entities = entityManager.createQuery(query).getResultList(); 

Trái ngược với ý kiến, chúng tôi làm có ý định tiếp tục cung cấp các tính năng Hibernate cụ thể, nhưng chúng tôi muốn giới thiệu những thông qua các API chuẩn thay vì thay vì cố gắng để quản lý giữ hai các API rất khác nhau có nghĩa là bổ sung đồng bộ.

+4

Hiện tại, dự án của tôi sử dụng API tiêu chí không được chấp nhận. Có nên viết lại các truy vấn với HQL hoặc CriteriaBuilder theo các khuyến nghị mới không? – Justas

Các vấn đề liên quan