\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}