JPA - Mapeamento de classe pai com atributo lista

É o seguinte pessoal estou com um problema de mapeamento usando JPA.

Estou usando o spring como framework.

Quando chamo o save na minha controller para inserir uma Activity e ActivityFile, funciona tranquilamente. Mas quando depois de inserir vou atualizar qualquer informação do pai ou do filho, como adicionar mais um arquivo, la no banco eu vejo que a FK de activity_file (id_activity) fica nula logo depois da atualização, e aí se perde a referência.

Saquem como estão minhas classes.

Obs: Uma atividade pode ter vários arquivos (ActivityFile)

Activity

@Entity
@SequenceGenerator(initialValue = 1, name = "base_gen", sequenceName = "activity_seq")
@Table(name = "activity")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "id_activity")) })
public class Activity extends GenericEntity {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Column(name = "nm_activity", nullable = false, length = 1000)
	private String name;

	@Enumerated(EnumType.STRING)
	@Column(name = "tp_status", nullable = false, length = 50)
	private ActivityStatusEnum status;

	@Column(name = "dt_activity")
	@JsonSerialize(using = LocalDateSerializer.class)
	@JsonDeserialize(using = LocalDateDeserializer.class)
	private LocalDate dateActivity;

	@Column(name = "ck_active")
	@Type(type = "org.hibernate.type.NumericBooleanType")
	private boolean active = true;

	@Column(name = "nr_occurrence", nullable = true)
	private Integer numberOccurrence;

	@Column(name = "nr_occurrence_accounted", nullable = true)
	private Integer numberOccurrenceAccounted;

	@Column(name = "nr_occurrence_glosa", nullable = true)
	private Integer numberOccurrenceGlosa;

	@Column(name = "nr_hour", nullable = true)
	private Integer numberHour;

	@Column(name = "nr_hour_accounted", nullable = true)
	private Integer numberHourAccounted;

	@Column(name = "nr_hour_glosa", nullable = true)
	private Integer numberHourGlosa;

	@Enumerated(EnumType.STRING)
	@Column(name = "tp_appropiation", nullable = true)
	private ActivityAppropiationEnum typeAppropiation;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id_user", nullable = false)
	private User student;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id_activity_type", nullable = false)
	private ActivityType activityType;

	@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false, fetch = FetchType.LAZY)
	@JoinColumn(name = "id_activity")
	@LazyCollection(LazyCollectionOption.FALSE)
	@JsonSerialize(using = ActivityFileListSerializer.class)
	private List<ActivityFile> activityFiles;
	
	public Activity() { }
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public ActivityStatusEnum getStatus() {
		return status;
	}

	public void setStatus(ActivityStatusEnum status) {
		this.status = status;
	}

	public LocalDate getDateActivity() {
		return dateActivity;
	}

	public void setDateActivity(LocalDate dateActivity) {
		this.dateActivity = dateActivity;
	}

	public Integer getNumberOccurrence() {
		return numberOccurrence;
	}

	public void setNumberOccurrence(Integer numberOccurrence) {
		this.numberOccurrence = numberOccurrence;
	}

	public Integer getNumberOccurrenceAccounted() {
		return numberOccurrenceAccounted;
	}

	public void setNumberOccurrenceAccounted(Integer numberOccurrenceAccounted) {
		this.numberOccurrenceAccounted = numberOccurrenceAccounted;
	}

	public Integer getNumberHour() {
		return numberHour;
	}

	public void setNumberHour(Integer numberHour) {
		this.numberHour = numberHour;
	}

	public Integer getNumberHourAccounted() {
		return numberHourAccounted;
	}

	public void setNumberHourAccounted(Integer numberHourAccounted) {
		this.numberHourAccounted = numberHourAccounted;
	}

	public ActivityAppropiationEnum getTypeAppropiation() {
		return typeAppropiation;
	}

	public void setTypeAppropiation(ActivityAppropiationEnum typeAppropiation) {
		this.typeAppropiation = typeAppropiation;
	}

	public User getStudent() {
		return student;
	}

	public void setStudent(User student) {
		this.student = student;
	}

	public ActivityType getActivityType() {
		return activityType;
	}

	public void setActivityType(ActivityType activityType) {
		this.activityType = activityType;
	}

	public Integer getNumberOccurrenceGlosa() {
		return numberOccurrenceGlosa;
	}

	public void setNumberOccurrenceGlosa(Integer numberOccurrenceGlosa) {
		this.numberOccurrenceGlosa = numberOccurrenceGlosa;
	}

	public Integer getNumberHourGlosa() {
		return numberHourGlosa;
	}

	public void setNumberHourGlosa(Integer numberHourGlosa) {
		this.numberHourGlosa = numberHourGlosa;
	}

	public List<ActivityFile> getActivityFiles() {
		return activityFiles;
	}

	public void setActivityFiles(List<ActivityFile> activityFiles) {
		this.activityFiles = activityFiles;
	}

	public boolean isActive() {
		return active;
	}

	public void setActive(boolean active) {
		this.active = active;
	}
	
}

ActivityFile

@Entity
@SequenceGenerator(initialValue = 1, name = "base_gen", sequenceName = "activity_file_seq")
@Table(name = "activity_file")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "id_activity_file")) })
public class ActivityFile extends GenericEntity {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Column(name = "nm_file", nullable = false, length = 200)
	private String name;

	@Column(name = "tp_file", nullable = false, length = 200)
	private String type;

	@Enumerated(EnumType.STRING)
	@Column(name = "nm_status", nullable = true)
	private ActivityStatusFile status;

	@Lob
	@Column(name = "byte_file", nullable = false, length = 2000)
	private byte[] file;

	@Column(name = "nr_size", nullable = false)
	private double size;

	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH})
	@JoinColumn(name = "id_activity")
	private Activity activity;

	public ActivityFile() {
	}

	public void setSize(double size) {
		this.size = size;
	}

	public Activity getActivity() {
		return activity;
	}

	public void setActivity(Activity activity) {
		this.activity = activity;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public ActivityStatusFile getStatus() {
		return status;
	}

	public void setStatus(ActivityStatusFile status) {
		this.status = status;
	}

	public byte[] getFile() {
		return file;
	}

	public void setFile(byte[] file) {
		this.file = file;
	}

	public double getSize() {
		return size;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

}

Brigadão desde já…