Hibernate: Proxy, load() e merge()

Alguém poderia me ajudar a cortar algumas arestas que sobraram em relação aos meus estudos de Hiberante?

1 - Parece que Proxy é um objeto falso que o Hibernate utiliza, ao invés de manipular diretamente a classe da aplicação, certo?
2 - A diferença do método load() para o get() é apenas que o load carrega uma tabela relacionada somente quando ele é chamado, e o get carrega tudo de uma vez?
3 - Quanto ao merge() não entendi exatamente onde e quando ele deve ser usado.

Se possível poderiam postar um exemplo simples usando estes métodos, por favor?

Obrigado!