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