Hibernate - Linguagens de Consulta

Qual a diferença entre as linguagens de consulta do hibernate(Criteria,HQL e SQL)??? E qual a vantagem de se usar uma ou outra?

Criteria - Consultas são montadas através de objetos em Java.
HQL - Linguagem de consulta do Hibernate, similar ao SQL.

É uma questão de gosto neste caso. Há quem prefira usar Criteria, outros HQL. Em um projeto meu, quando necessário usei HQL.

Obrigado!!