2011-09-21 22 views

Odpowiedz

74

Nie wykluczają się wzajemnie, można używać obu jednocześnie. Prognozy są generalnie stosowane w kontekście niektórych kryteriów.

Mówiąc prościej, projekcje hibernacji są używane w celu wysłania zapytania tylko do podzbioru atrybutów encji lub grupy podmiotów, których zapytania dotyczą kryteriów. Można również użyć rzutowania, aby określić klauzule distinct i funkcje agregujące, takie jak max, sum i tak dalej. To tak, jak odnosząc się do danych, które pobierasz , które. Podobnie jak modyfikowanie klauzuli select w zapytaniu SQL.

Kryteria hibernacji służą do definiowania warunków, które dane muszą spełniać, aby je wybrać. To tak jak odwołanie się do , jak to jest, że dane, które pobierasz, to. Podobnie jak modyfikowanie klauzul zapytania SQL z zakresu from i where.

Zauważ, że ten jak i który nie jest absolutnie prawdą, to tylko orientacja na celu wspomóc OP. Możesz zmienić na przykład , które pobierają z createCriteria(String associationPath).

Sugeruję, aby spojrzeć na ten artykuł Hibernate: Criteria Queries in Depth

+2

A warto liczyć() as -> powrotnej (Number) session.createCriteria ("Book") .setProjection (Projections.rowCount()). UniqueResult(); –

1

Projekcja jest interfejsem podane w pakiecie „org.hibernate.criterion” Projekcje jest klasa podane w tym samym opakowaniu, w rzeczywistości Projekcja jest interfejsem, Projections jest klasą i jest fabryką do wytwarzania obiektów projekcyjnych.

W klasie prognoz mamy wszystkie metody statyczne, a każda metoda tej klasy zwraca obiekt interfejsu rzutowania.

Jeśli chcemy dodać obiekt Projekcję kryteriów to musimy wezwać setProjection() metoda

Pamiętaj, że podczas dodawania obiektu projekcji z kryteriami, możliwe jest dodanie jednego obiektu na raz.Oznacza to, że jeśli dodamy drugi obiekt rzutowania, ten drugi nadpisze pierwszy (pierwszy nie będzie działać), więc w tym momencie możemy tylko jeden obiekt rzutowania do obiektu kryterium

Przy użyciu kryteriów, jeśli chcemy załadować częściowy obiekt z bazy danych, a następnie musimy utworzyć obiekt projekcja na nieruchomości, która ma być ładowany z bazy

Criteria crit = session.createCriteria(Products.class); 
crit.setProjection(Projections.proparty("proName")); 
List l=crit.list(); 
Iterator it=l.iterator(); 
while(it.hasNext()) 
{ 
    String s = (String)it.next(); 
    // ---- print ----- 
} 

Jeśli dodamy kilka występów z kryteriami to ostatnia projekcja dodany zostanie uznanych wykonać zobaczyć ...

Criteria crit = session.createCriteria(Products.class); 

Projection p1 = Projection.property("proName"); 
Projection p2 = Projection.property("price"); 

crit.setProjection(p1): 
crit.setProjection(p2): 
List l=crit.list(); 
+1

Jak to odpowiada na pytanie? – 000

+1

link do oryginalnego http://www.java4s.com/hibernate/working-with-hibernate-projections-in-criteria/ –

0

występy są wykorzystywane do wykonywania operacji zbiorczych i dostać jeden zapytanie kolumny, z ograniczeniami możemy uzyskać dostęp do ROW ale z występami możemy uzyskać dostęp do całej KOLUMNY

EX -

public static void main(String[] args) { 
    SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory(); 
    Session session = factory.getCurrentSession(); 
    try { 
     session.beginTransaction(); 
     Criteria c = session.createCriteria(Student.class); 
     Projection p = Projections.property("lastName"); 
     List<String> students = c.setProjection(p).list(); 
     for(String s:students) 
      System.out.println(s); 
     session.getTransaction().commit(); 
     session.close(); 
    } finally { 
     factory.close(); 
    } 
} 

W powyższym przykład użyłem wywołania projekcji, aby DODAĆ właściwość projekcji "nazwa" do kryteriów. Zwraca winchester winchester winchester winchester, który jest LastName COLUMN w tabeli.

Wyjście =

Hibernate: wybierz this_.last_name jak y0_ od studenta this_ winchester winchester winchester winchester

Uwaga - Możemy dodać tylko jeden występ, jeśli dodaj więcej niż 1 rzut, poprzedni zostanie zastąpiony. Jeśli chcesz dodać więcej niż jeden występ będzie nedd ProjectionList klasa

Orignal stole -

enter image description here

Powiązane problemy