[Duvida] - Sobre o hibernate e relacionamentos

Estou com algumas dúvida e gostaria que que vocês me ajudassem.
[color=blue]1- Quando eu uso o relacionamento @OneToMany, ele cria uma chave estrangeira na tabela com a cardinalidade N? Ex:
[/color][code]@Entity
public class Cliente {

 @Id
 private int cnpj;

 @OneToMany
 private List<Endereco> endereco;

}[/code]
[color=blue]2- No caso, a PK na tabela endereço como eu faço para ela ser a fk e mais um atributo qualquer da tabela?[/color]Ex: FK+nomeRua
[color=blue]3- Como funciona o @ManyToMany ? [/color] Ex:
Eu tenho uma entidade matéria-prima que se relaciona com a entidade Produto e este relacionamento tem um atributo que se chama qtd. Como ficaria isso no java?
[color=blue]4- Alguem teria alguma indicação de livro ou tutorial de como e quando usar o hibernate? Tipo um tutorial que explique a definição do mapeamento objeto/relacional
estou começando nesse assunto e estou com muita dificulade em saber quando usar o hibernate.
[/color]
Abrç.

Os livro vc pode dar uma nesta trilha http://www.guj.com.br/posts/list/55937.java

Uma boa lida nesta documentação irá ajudar bastante http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/pdf/hibernate_annotations.pdf

Eu dei uma lida na documentação, mas por ser inglês não consegui intender muita coisa. Mas talvez você possa me ajudar nisso. Em uma anotation @ManyToOne eu preciso criar a FK ou o proprio hibernate cria?
E sobre os livros, obrigado muito ja estou pesquisando preços desses ae, parecem ser bons.
Abrç.