No fórum do Hibernate :
Isso é do livro Hibernate em ação. Bom ler isso ..
Recuperando objetos por identificador O seguinte trecho de código do Hibernate recupera um objeto Usuário do banco de dados:
User user = (User) session.get(User.class, userID);
O método get () é especial porque o identificador identifica exclusivamente uma única instância de uma classe. Portanto, é comum que os aplicativos usem o identificador como um identificador conveniente para um objeto persistente. A recuperação por identificador pode usar o cache ao recuperar um objeto, evitando uma ocorrência no banco de dados se o objeto já estiver armazenado em cache. O Hibernate também fornece um método load ():
User user = (User) session.load(User.class, userID);
O método load () é mais antigo; get () foi adicionado à API do Hibernate devido à solicitação do usuário. A diferença é trivial:
Se load () não puder encontrar o objeto no cache ou banco de dados, uma exceção é lançada. O método load () nunca retorna nulo. O método get () retorna null se o objeto não puder ser encontrado.
O método load () pode retornar um proxy em vez de uma instância persistente real. Um proxy é um espaço reservado que dispara o carregamento do objeto real quando ele é acessado pela primeira vez; Por outro lado, get () nunca retorna um proxy. Escolher entre get () e load () é fácil: se você tiver certeza de que o objeto persistente existe e que a inexistência seria considerada excepcional, load () é uma boa opção. Se você não tiver certeza de que existe uma instância persistente com o identificador fornecido, use get () e teste o valor de retorno para ver se é nulo. Usar load () tem outra implicação: o aplicativo pode recuperar uma referência válida (um proxy) para uma instância persistente sem acessar o banco de dados para recuperar seu estado persistente. Portanto, load () pode não lançar uma exceção quando não encontrar o objeto persistente no cache ou banco de dados; a exceção seria lançada posteriormente, quando o proxy fosse acessado. Claro, recuperar um objeto por identificador não é tão flexível quanto usar consultas arbitrárias.