2013-02-28 13 views
5

Na przykład API Kryteriów JPA można używać bez wygenerowanego metamodelu. Brak bezpieczeństwa typu, ale mogę utworzyć zapytanie bez wcześniejszej znajomości modelu danych, wykorzystując tylko odbicie w czasie wykonywania. Chciałbym używać Querydsl w ten sam sposób. Nie dbam o bezpieczeństwo typu, ponieważ nie znam modelu danych z góry.Czy można używać Querydsl bez wygenerowanych typów zapytań?

W moim ostatnim projekcie chciałbym użyć Querydsl głównie dlatego, że stanowi kolejną warstwę ponad trwałość. Mam więc nadzieję, że użyję tych samych zapytań niż JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Kolekcje i RDFBean.

Czy jest jakaś alternatywa dla Querydsla, która może być używana w opisany sposób?

Od czasu pojawienia się DB NoSQL. Czy istnieją inne ramy, które stanowią podobną warstwę abstrakcyjną w stosunku do różnych dostawców trwałości?

Odpowiedz

5

Istnieją dwa sposoby korzystania z Querydsl bez wygenerowanego metamodelu.

Pierwszym sposobem jest zbudowanie ręcznie wyrażeń http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379

a drugi jest wykorzystanie funkcjonalności alias Querydsl http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html

Zapytania Querydsl wspólne interfejsy i wyglądają podobnie, ale można” • Używaj tych samych zapytań bezpośrednio w stosunku do różnych typów trwałości, ponieważ Querydsl nie zapewnia żadnej abstrakcji zapytań między modułami.

Poszczególne części zapytań mogą być udostępniane, takie jak predykaty lub rzuty, ale zapytania są powiązane z konkretnym modułem.

Co można zrobić, to trzymać się jednej z powszechnych abstrakcji trwałości JPA lub JDO i używać za ich pośrednictwem silników RDBMS, OODB i NoSQL.

+0

Szkoda, że ​​Querydsl nie zapewnia takiej abstrakcji w stosunku do modułów. Byłoby to bardzo korzystne i mogłoby skłonić Querydsl do "alternatywy LINQ w ekosystemie java". Czy istnieje jakiś szczególny powód, dla którego Querydsl nie zapewnia takiej funkcjonalności? Dlaczego zapytania różnią się między modułami? –

+0

Czy LINQ to zapewnia? –

+1

Querydsl nie ma na celu dostarczenia abstrakcji trwałości, to główny powód, dla którego głównym celem jest zapewnienie spójnej składni dla zapytań o trwałość. –

Powiązane problemy