Złe podejście (wywołanie obiektu DAO):
def object = dao.getById(1);
dao.remove(object);
Dobre rozwiązanie (ciało metody wewnątrz obiektu DAO):
def session = getSession();
String hql = "delete from sample where id = :target";
Query query = session.createQuery(hql);
query.setParameter("target", 1);
query.executeUpdate();
Wniosek: W złym podejściu niepotrzebnie pobieramy cały obiekt, skoro tak naprawdę potrzebujemy tylko jego identyfikator do usunięcia.
W zależności od typu obiektu przechowywanego w bazie danych programista powinien zastanowić się nad zaimplementowaniem wydajnej metody do pobierania listy obiektów. Nie ma najmniejszego problemu, jeżeli obiekt to na przykład profil użytkownika składający się z trzech właściwości: imię, nazwisko i e-mail. Problem pojawia się wtedy kiedy profil ten zawiera także obrazek zapisany jako tablica bajtów. Przy wywołaniu metody dao.getAll() z bazy pobrane zostaną wszystkie obrazki, to znacznie spowolni działanie aplikacji. Te tablice bajtów w większości przypadków nie są potrzebne w warstwie prezentacji.
Przykład prawidłowej implementacji metody getAll:
def session = getSession();
String hql = "select firstname, lastname, email from Profile";
Query query = session.createQuery(hql);
return query.list();
Uwaga: W zapytaniu HQL używamy nazw właściwości obiektu a nie nazw kolumn w bazie danych. Podobnie postępujemy z klasami i nazwami tabel.