Vou explicar bem resumido para não deixar este POST cheio de informação
Quando utilizo a anotação OneToMany(orphanRemoval=true) para persistir um dado, ele insere no banco numa boa.
Após inserido vou Edita-lo e ao fazer o MERGE faço o seguinte:
utilizo o orphanRemoval para remover tudo e inserir dinovo novos EMBEDDED
Verificador verificador = entity.find(.....); // Tenho em mãos a Classe
verificador.getIntervalos().clear(); // Limpo os Intervalos da ArrayList para inserir os outros novos
for (int i = 0; hoursByInterval != null && i < hoursByInterval.length; i++) {
Intervalo intervalo = new Intervalo(verificador, hoursByInterval[i]);
verificador.getIntervalos().add(intervalo);
}
entityManager.merge(verificador);
entityManager.getTransaction().commit();
Estou usando @embedded e nao GeneratedValue
pois somente 2 chaves são importantes no Intervalo seria o VERIFICADOR_ID e HORARIO
a inserção ocorre assim
1, 20.00 // ID , horario em FLOAT
1, 20.30
1, 21.00
1, 21.30
…
Mas ao dar o Commit alterando os dados do Intervalo ocorre um erro que não sei como resolver isso … 
Exception:
java.lang.IllegalStateException: An entity copy was already assigned to a different entity.
at org.hibernate.event.internal.EventCache.put(EventCache.java:184)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:285)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:151)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:910)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)
at org.hibernate.engine.spi.CascadingAction$6.cascade(CascadingAction.java:288)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:439)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:183)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:157)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:900)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:884)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
Meu Código Resumidamente está abaixo:
[code]Classe Verificador{
@OneToMany(orphanRemoval=true,mappedBy=“verificador”,cascade=CascadeType.ALL)
private List intervalos;
Classe Intervalo {
@EmbeddedId
private IntervaloPK pk;
@ManyToOne
@JoinColumn(name="VERIFICADOR_ID",referencedColumnName="VERIFICADOR_ID", nullable=false, insertable=false, updatable=false)
private Verificador verificador
}
@Embeddable
public class IntervaloPK implements Serializable {
@Column(name="VERIFICADOR_ID", nullable=false)
private Long verificadorId;
@Column(name="HORARIO_INTERVALO", nullable=false,precision=2,scale=2)
private float horario;
};[/code]
Por favor se puder me ajudar !
Abrs!