2013-02-28 36 views
5

Ví dụ: API tiêu chí JPA có thể được sử dụng mà không có metamodel được tạo. Loại an toàn bị mất, nhưng tôi có thể tạo truy vấn mà không cần biết trước về mô hình dữ liệu chỉ sử dụng sự phản chiếu khi chạy. Tôi muốn sử dụng Querydsl theo cùng một cách. Tôi không quan tâm về an toàn loại vì tôi không biết trước mô hình dữ liệu.Có thể sử dụng Querydsl không có các loại truy vấn được tạo không?

Trong dự án gần đây của tôi, tôi muốn sử dụng Querydsl chủ yếu bởi vì nó tạo thành một lớp khác trên sự kiên trì. Vì vậy, tôi hy vọng có thể sử dụng cùng một truy vấn trên JPA, JDO, JDBC, Lucene, Tìm kiếm Hibernate, MongoDB, Bộ sưu tập và RDFBean.

Hoặc có cách nào khác thay thế cho Querydsl có thể được sử dụng theo cách được mô tả không?

Vì NoSQL DB đang tăng lên. Có khung nào khác cấu thành lớp trừu tượng tương tự trên các nhà cung cấp kiên trì khác nhau không?

Trả lời

5

Có hai cách để sử dụng Querydsl không có siêu mô hình được tạo.

Cách đầu tiên là xây dựng biểu thức của bạn bằng tay http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379

và thứ hai là để sử dụng chức năng Bí danh của Querydsl http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html

Các truy vấn Querydsl chia sẻ giao diện chung và trông giống nhau, nhưng bạn có thể' t sử dụng cùng một truy vấn trên các loại persistence khác nhau trực tiếp, vì Querydsl không cung cấp bất kỳ trừu tượng truy vấn nào trên các mô-đun.

Các phần truy vấn riêng lẻ có thể được chia sẻ, chẳng hạn như vị từ hoặc dự đoán, nhưng truy vấn được gắn với một mô-đun nhất định.

Những gì bạn có thể làm là gắn bó với một trong những trừu tượng bền bỉ chung JPA hoặc JDO và sử dụng các công cụ RDBMS, OODB và NoSQL thông qua chúng.

+0

Thật đáng tiếc là Querydsl không cung cấp sự trừu tượng hóa như vậy đối với các mô-đun. Điều đó sẽ rất có lợi và có thể đẩy Querydsl đến "LINQ thay thế trong hệ sinh thái java". Có lý do cụ thể nào khiến Querydsl không cung cấp chức năng như vậy không? Tại sao các truy vấn khác nhau giữa các mô-đun? –

+0

LINQ có cung cấp điều đó không? –

+1

Querydsl không nhằm mục đích cung cấp bất kỳ trừu tượng kiên trì nào, đó là lý do chính, mục tiêu chính là cung cấp cú pháp nhất quán an toàn cho các truy vấn liên tục. –