39/66
\begin{frame}[fragile]
  \frametitle{JPA/Hibernate: HQL Queries}
  
  \begin{goal}{}
    HQL queries query the object-representation of data:
    \begin{itemize}
      \item Allows member access, e.g. employee.department.name.
    \pause
      \item This is \alert{not} calling methods on the objects!
    \pause
      \item Query may return objects (if you are careful).
    \end{itemize}
  \end{goal}
  \pause
  
  \begin{exampleblock}{HQL Query: all events in Amsterdam}
    \vspace{-1ex}
    \begin{lstlisting}[language=Java]
Query query = em.createQuery("from Events as event 
                 where event.venue.address.city = 'Amsterdam'");
List eventsInAmsterdam = (List) query.list();
for(Event event : eventsInAmsterdam) {
  ... something ...
}
    \end{lstlisting}
    \vspace{-1ex}
  \end{exampleblock}
  \pause
  
  \begin{goal}{}
    This is a more efficient way to get the events in Amsterdam.\\
    \remark{Under the hood translated to SQL with two joins (3 tables).}
  \end{goal}
  \pause
  
  \begin{alertblock}{}
    Many queries do not return a full object!\\ E.g. what is the type of "\alert{select name,date from Events}"?
  \end{alertblock}
\end{frame}