2012-06-09 11 views
15

Jakie jest zastosowanie metody setResultTransformer w API kryteriów? Czy ktoś może to wyjaśnić na prostym przykładzie? Czytam javadocs, ale nie jestem w stanie ich jasno zrozumieć.setResultTransformer w kryteriach

Pozdrawiam,

Odpowiedz

13

Domyślna ResultTransformer dla zapytania kryteriów, które nie używają setProjections() będzie ROOT_ENTITY.

Jeśli mamy student w relacji ManyToMany do Departamentu kwerenda może wyglądać tak ...

Session session = (Session) getEntityManager().getDelegate(); 
    Criteria crit = session.createCriteria(Student.class) 
     .createAlias('departments', 'department'); 

To zapytanie zwróci duplikatów. Ale ustawić ResultTransformer jako ...

crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 

teraz wyniki będą różnić się podczas hibernacji marszałkowie wyniki. (Albo mam na myśli unmarshalls?)

Jeśli nie chcesz hibernacji, aby powrócić do zapytania jako List<Student> ale wolą obsługiwać wyniki jako List<Object[]> następnie

crit.setResultTransformer(CriteriaSpecification.PROJECTION) 
+1

Z dokumentu, widzę to wyrażenie dla ROOT_ALIAS: alias, który odnosi się do elementu "root" zapytania kryteriów. Co oznacza termin "root" w tym przypadku? Nie jestem w stanie zrozumieć, co root odnosi się w tym przypadku. Proszę wytłumacz. – user182944

+2

"root" oznacza dowolną klasę użytą podczas tworzenia instancji Criteria. W moim przykładzie root to Student. Wyniki zostaną zwrócone przez wywołanie metody crit.list() jako listy obiektów Uczniów. O ile nie poprosisz o ResultTransformation jako PROJECTION, w takim przypadku będzie to lista obiektów Object. (Edytuję również mój oryginalny przykład, aby usunąć ograniczenie, aby zapytanie zwróciło duplikaty.) – carbontax

7

prosto: jeśli robisz Critera : chcesz resultset być w szczególności przedmiotem jest można go używać jak: np:

.setResultTransformer(Transformers.aliasToBean(Employee.class)); 

Employee powinna odpowiadać ResultSet podmiotu.

+0

To działało idealnie! – normalUser

+0

Działa jak urok. Dobra wskazówka. Dzięki – niarb

Powiązane problemy