Dúvida Cache 2º Nivel Hibernate

Boa Noite a todos, andei estudando um pouco de cache de segundo, mas ta complicado de entender, tenho algumas duvidas e se alguem conseguir me ajudar valeu.

Enfim, Em 1 Exemplo Simples, de Estado e Cidade… Blz criei a tabela com todos estados, e criei algumas cidades… Cada cidade com seu estado…
Então Utilizei esse tipo de cache.

@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)

Criei uma busca pra testar.

Session session = HibernateUtil.getSession();
List<Estado> listEstado = session.createCriteria(Estado.class).setCacheable(true).list();
session.close();

session = HibernateUtil.getSession();
listEstado = session.createCriteria(Estado.class).setCacheable(true).list();
session.close();

Até ai blz, na primeira consulta ele vai no banco e depois, ele recupera as informações do cache…

Minha Dúvida é e o cache só funciona se a busca for repetida, tipo se eu procurasse por Todos e depois procurasse pelos Id’s 1,2,3 ele conseguiria achar no cache?

Se puderem me ajudar, Muito Obrigado, Até +

http://www.ehcache.org/documentation/user-guide/hibernate#Configure-Hibernate-Entities-to-use-Second-Level-Caching

Então cara, nem eh esse o caso, os tipo eu até entendi pra q servem…

Tipo Cache de 2º Nivel serve apenas pra objetos solitarios? Tipo fiz a pesquisa pela Cidade com Id 2, ai vai no banco caso ele precise desse objeto de novo ai ele pega do cache?

Agora pra cache em listas completas tem q usar o query cache?