Update com jpa

Tenho uma entidade que não consigo atualizar a lista: [list]private List cha = new ArrayList(); [/list].
Consigo persistir e atualizar os outros atributos.

@Entity
@Table(name = "disciplina")
public class Disciplina implements Serializable {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(nullable = false, unique = true)
	private int id;

	@Column(nullable = false, length = 150)
	private String nome;
	
	@Column(nullable = false, length = 26)
	private String senha;
	
	@Column(nullable = false, length = 150)
	private String curso;

	@Lob
	@Column(nullable = false)
	private String descricao;
	
//lista que nao consigo atualizar
	@OneToMany(mappedBy = "disciplina", cascade = CascadeType.ALL) 
	private List<DisciplinaCha> cha = new ArrayList<DisciplinaCha>(); 

	// usuario criador da disciplina
	@ManyToOne(optional = false)
	private Usuario usuario;

	// usuarios participantes da turma
	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name= "participa")		
	private List<Usuario> usuarios = new  ArrayList<Usuario>();

 // getters e setters

Método que utilizo para atualizar

public Disciplina atualizaDisciplina(Disciplina disciplina){
		EntityManager em = JPAUtil.getInstance().getEntityManager();
		EntityTransaction tx = em.getTransaction();
		try{
			tx.begin();
			disciplina = em.merge(disciplina);
			tx.commit();
			return disciplina;
		}catch(Exception e){
			tx.rollback();
			System.out.println("erro atualiza disciplina");
			e.printStackTrace();
			return null;		
		}finally{
			em.close();
		}
	}

Achei que se eu somente desse merge ele atualizaria todos atributos que tivessem cascade.All
Pois quando eu persisto a entidade Disciplina com em.persist(Disciplina) ele salva a entidade disciplina e todas as outras listas.

Alguem poderia me explicar por que isso nao ocorre com o merge?
A curto prazo vejo que uma solução seria recuperar os registros da entidade DisciplinaCha por query, verificar se eles se encontram na lista da entidade Disciplina ainda nao atualizada e
remover os registros diretamente.

public Disciplina atualizaDisciplina(Disciplina disciplina){
		EntityManager em = JPAUtil.getInstance().getEntityManager();
		EntityTransaction tx = em.getTransaction();
		String comando = "Select u from DisciplinaCha u where u.disciplina = ?1"; //query para buscar
		try{
			tx.begin();
			Query q = em.createQuery(comando);
			q.setParameter(1, disciplina);
			List<DisciplinaCha> cha = q.getResultList();
			for (DisciplinaCha disciplinaCha : cha) {
				if(!disciplina.getCha().contains(disciplinaCha))
					em.remove(disciplinaCha); //removendo os que não se encontram mais
			}
			disciplina = em.merge(disciplina);
			em.flush();
			tx.commit();
			return disciplina;
		}catch(Exception e){
			tx.rollback();
			System.out.println("erro atualiza disciplina");
			e.printStackTrace();
			return null;		
		}finally{
			em.close();
		}
	}

Assim eu sei que funciona, são atualizados todos os dados, mas pq somente o merge não faz isso???
Aguem poderia me explicar

[]s

o mappedby que eu saiba, seria para identificar
o dono do relacionamento, ou seja, quem teria a FK,
no caso da classe da disciplina ela não tem a fk da DisciplinaCha
pois é uma lista, logo não tem que ter o mappedby.

[quote=kleberdamasco]o mappedby que eu saiba, seria para identificar
o dono do relacionamento, ou seja, quem teria a FK,
no caso da classe da disciplina ela não tem a fk da DisciplinaCha
pois é uma lista, logo não tem que ter o mappedby.[/quote]

Ao gerar o banco de dados desta maneira, que esta e com o mappedby onde esta, ele não gera chave estrangeira na tabela Disciplina e sim na tabela DisciplinaCha.

Eu so queria entender o porquê. Uma vez o formulário preenchido eu dou um persist(Disciplina) e tudo é persistido, mas para update a mesma coisa não aconteceu, pelo menos comigo.