poniedziałek, 22 lipca 2013

Hibernate - HSQL/SQL - prosty przykład

Zapytania HSQL można definiować w obiektach których te zapytania dotyczą. Poniżej przykłąd zapytań dla klasy Book. Zapytania są zdefiniowane z użyciem adnotacji @NamedQueries i @NamedQuery

1) Dafinicja z użyciem adnotacji @NamedQueries i @NamedQuery

@Entity(name = "Book")
@NamedQueries( {
        @NamedQuery(name = "Book.getElements", query = "SELECT b FROM Book b"),
        @NamedQuery(name = "Book.get", query = "SELECT b FROM Book WHERE b.id = :id")})
@Table(name = "BOOK")
public class Book extends Base {
   ...
}

Przykłady użycia HSQL:
Query q = session.getNamedQuery("Book.getElements");
q = sessionz.createQuery("");
q.setParameter(0, "param");
q.list();
q.executeUpdate();
q.uniqueResult();
q.setMaxResults(max)

2)) Wywołanie zapytań realizuje się wewnątrz DAO. Przykładowe wywołania poniżej:

public class BookDAOImpl implements BookDAO {

private HibernateTemplate hibernateTemplate;

public void setSessionFactory(SessionFactory sessionFactory) {
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
   ...
//Zapytanie definiowane bezpośrednio w DAO
public Book findByName(String name) {
@SuppressWarnings("unchecked")
List<Book> result = (List<Book>) hibernateTemplate.findByNamedParam(
"SELECT t FROM Book t where name= :name"
, "name",
name);
if (!result.isEmpty()) {
return result.get(0);
}
return null;
}

//aktualizacja obiektu z użyciem zapytania zdefiniopwanego w klasie Book
public void updateBookName(final Book book) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
                                Query updateQuery = session.getNamedQuery("Book.updateName");
query.setParameter("name", book.getName());
Integer result = query.executeUpdate();
return result;
}
});
}
}

Brak komentarzy:

Prześlij komentarz