Jpa

Olá!

Eu sou um pouco novo em JPA (EclipseLink) e estou trabalhando com um banco de dados que praticamente tem todos os tipos de relacionamentos. Eu tenho algumas dúvidas?

A primeira é que eu tenho uma entidade com relacionamento um para muitos e estes muitos às vezes mudam pra caramba. Por exemplo, vamos supor Aluno e DiasDeCurso. Um aluno foi matriculado entre 01/02/2011 a 20/02/2011, então eu teria 20 registros filhos. Mas eu posso editar o tempo de curso para outros intervalos de datas, tendo que deletar alguns ou criar novos. Por exemplo, se eu mudar para 01/01/2011 a 10/02/2011 eu preciso criar 31 registros para janeiro e deletar os 10 últimos de fevereiro. Se eu tiver com o aluno na memória, eu posso simplesmente remover estes 10 dias do array e adicionar os outros 30 e dar um merge no aluno? Ou eu preciso explicitamente dar remove nestes 10 filhos? E quando o fizer, ele automáticamente será removido do array? Eu tenho que ficar recuperando o aluno várias vezes durante o processo?

ALUNO
aluno_id
nome

DIAS_DE_CURSO
dia
aluno_id
presenca

A outra dúvida é mais ou menos relacionado, mas um cenário diferente. Eu preciso mudar todos os filhos de pai. Eu tenho, vamos supor, Aluno e Materia. Aluno tem 5 materias. E estas materias já estão persistidas. Mas daí este aluno viajou e eu preciso transferir estas matérias para outro aluno. Qual a melhor forma? Eu pensei em dar um update com query nativa, tipo “update materia set aluno_id = <id do novo aluno> whee materia_id = <id da materia> e aluno_id = <id do aluno antigo>”, mas daí fazendo isso, se eu recuperar o aluno (find) já vai ter as alterações? Eu precisaria far um flush? Porque eu preciso fazer tudo dentro de uma transação e o JPA precisaria refletir como se tivesse commitado, mas a qualquer momento eu poderia dar um rollback.

ALUNO
aluno_id
nome

MATERIA
materia_id
aluno_id
nome

Importante: em ambos os casos o ID do pai faz parte da primary key do filho. Claro que nestes exemplos que eu dei não tem sentido Materia ter um ID do aluno, mas eu não posso falar os nomes reais ou meu chefe me mata! rs.

Mas por curiosidade: seria (bem) mais simples caso a primary key fosse apenas um integer nos filhos?
ALUNO
aluno_id
nome

DIAS_DE_CURSO
dia
aluno_id
presenca

MATERIA
materia_id
aluno_id
nome

Também sou novo nesse assunto e gostaria de saber se vc tem algum material ou dica de algum que possa me indicar, pode ser livro, site, etc.