Hibernate inserta duplicados en una colección @OneToMany

Tengo una pregunta sobre Hibernate 3.6.7 y JPA 2.0.

Considere las siguientes entidades (se omiten algunos captadores y establecedores por brevedad):

@Entity
public class Parent {
    @Id
    @GeneratedValue
    private int id;

    @OneToMany(mappedBy="parent")
    private List<Child> children = new LinkedList<Child>();

    @Override
    public boolean equals(Object obj) {
        return id == ((Parent)obj).id;
    }

    @Override
    public int hashCode() {
        return id;
    }
}

@Entity
public class Child {
    @Id
    @GeneratedValue
    private int id;

    @ManyToOne
    private Parent parent;

    public void setParent(Parent parent) {
        this.parent = parent;
    }

    @Override
    public boolean equals(Object obj) {
        return id == ((Child)obj).id;
    }

    @Override
    public int hashCode() {
        return id;
    }
}

Ahora considere esta pieza de código:

// persist parent entity in a transaction

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

Parent parent = new Parent();
em.persist(parent);
int id = parent.getId();

em.getTransaction().commit();
em.close();

// relate and persist child entity in a new transaction

em = emf.createEntityManager();
em.getTransaction().begin();

parent = em.find(Parent.class, id);
// *: parent.getChildren().size();
Child child = new Child();
child.setParent(parent);
parent.getChildren().add(child);
em.persist(child);

System.out.println(parent.getChildren()); // -> [Child@1, Child@1]

em.getTransaction().commit();
em.close();

a entidad secundaria se está insertando incorrectamente dos veces en la lista de elementos secundarios de la entidad principal.

Al realizar una de las siguientes acciones, el código funciona bien (no hay entradas duplicadas en la lista):

quitar elmappedBy atributo en la entidad principal realizar alguna operación de lectura en la lista de elementos secundarios (por ejemplo, línea de comentario desmarcada por*)

Esto obviamente es un comportamiento muy extraño. Además, cuando se utiliza EclipseLink como proveedor de persistencia, el código funciona exactamente como se esperaba (sin duplicados).

Es esto un error de Hibernate o me falta algo?

Gracia

Respuestas a la pregunta(5)

Su respuesta a la pregunta