Giriş
Select ile single selection veya multi selection yapılabilir. Select başlığı altına (select, distinct, multiselect, array, tuple, construct) kullanımları girer.
select() ile Object veya Object listesi elde edilir.
multiselect() ile Object[] listesi elde edilir.
array() ile Object[] listesi elde edilir. Bu anlamda array ile multiselect aynı şeydir.
tuple() ile Tuple elde edilir.
construct() ile bizim belirttiğimiz nesne elde edilir. Yani projection yapılır
Genel Kullanım
1. CriteriaBuilder.createQuery() ile CriteriaQuery nesnesi yarat
2. CriteriaQuery.from () ile Root nesne yarat
3. Root nesne ile predicate yarat.
4. CriteriaQuery.select (root).where(cb.X());
şeklinde sorgu yap.
Select ile single selection veya multi selection yapılabilir. Select başlığı altına (select, distinct, multiselect, array, tuple, construct) kullanımları girer.
select() ile Object veya Object listesi elde edilir.
multiselect() ile Object[] listesi elde edilir.
array() ile Object[] listesi elde edilir. Bu anlamda array ile multiselect aynı şeydir.
tuple() ile Tuple elde edilir.
construct() ile bizim belirttiğimiz nesne elde edilir. Yani projection yapılır
Genel Kullanım
1. CriteriaBuilder.createQuery() ile CriteriaQuery nesnesi yarat
2. CriteriaQuery.from () ile Root nesne yarat
3. Root nesne ile predicate yarat.
4. CriteriaQuery.select (root).where(cb.X());
şeklinde sorgu yap.
Bir CriteriaQuery nesnesi yaratılır ve select işlemi için ayarlanır. Bu nesne EntityManager.createQuery() metoduna geçilir ve bir TypedQuery nesnesi elde edilir. TypedQuery nesnesinin getResultList() veya getSingleResult() metodu çağrılır. Şöyle yaparız.
CriteriaQuery<Father> criteriaQueryForFatherDTOs = ...;
...
TypedQuery<Father> typedQuery = entityManager.createQuery(criteriaQueryForFatherDTOs);
...
List<Father> listOfFathers = typedQuery.getResultList();
distinct metodu
JPQL olarak şuna benzer
JPQL olarak şuna benzer
SELECT DISTINCT c.currency FROM Country c
Örnek
Şöyle yaparız. distinct() işleminin döndürdüğü yeni CriteriaBuilder nesnesini saklamak gerekir.
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Father> cq = builder.createQuery(Father.class);
Root<Father> rootForFather = cq.from(Father.class);
cq = cq.select(rootForFather).distinct(true);
TypedQuery<Father> typedQuery = entityManager.createQuery(cq);
multiselect metodu
Diğer
1. Array Çekmek
Örnek
Şöyle yaparız.
Root<Student> teacher = query.from(Student.class);
query.multiselect(cb.avg(teacher.get("salary")),...);
1. Array Çekmek
Root nesneden seçilecek sütun isimleri alınır ve CriteriaBuilder.array() metoduna verilir. Bu çağrının sonucu da CriteriaQuery.select metoduna verilir. Böylece bir List<Object[]> çekilir.
Örnek
Şöyle yaparız
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<Country> c = q.from(Country.class);
q.select(cb.array(c.get("name"), c.get("capital").get("name")));
List<Object[]> results = em.createQuery(q).getResultList();
for (Object[] result : results) {
System.out.println("Country: " + result[0] + ", Capital: " + result[1]);
}
2. Tuple Çekmek
Root nesneden seçilecek 2 tane sütun isimi alınır ve CriteriaBuilder.createTupleQuery() metoduna verilir. Bu çağrının sonucu da CriteriaQuery.select metoduna verilir. Böylece bir List<Tuple[]> çekilir.
3. Construct Çekmek - Projection
Örnek
Örnek
Şöyle yaparız
CriteriaQuery<PersonDetails> q = cb.createQuery(PersonDetails.class);
Root<Person> c = q.from(Person.class);
q.select(cb.construct(PersonDetails.class,
c.get(Person_.firstName),
c.get(Person_.lastName),
c.get(Person_.birthdate)
));
Örnek
Şöyle yaparız
CriteriaQuery<CountryAndCapital> q = cb.createQuery(CountryAndCapital.class);
Root<Country> c = q.from(Country.class);
q.select(cb.construct(CountryAndCapital.class,
c.get("name"), c.get("capital").get("name")));
Hiç yorum yok:
Yorum Gönder