JPA OneToMany - la Liste n'est pas mise à jour après ajouter/supprimer un Objet, mais persister dans la DB

J'ai un Problème avec ma Relation comme suit:

(Je suis en utilisant JPA Hibernent pas!)

J'ai un 1:N (Parent de l'Enfant).
Sur une JSP-Site, les Parents et les Enfants sont affichés.
Si je charge la page JSP-Site (la PREMIÈRE FOIS) et Enregistrer un Parent avec un Enfant, tout est ok, le Parent est sauvegardé et l'Enfant est enregistré trop à la bd avec la Clé Étrangère.
Après cela, un deuxième JSP-Site est affiché avec le Parent et les Enfants.

Mais si je reviens pour le premier Site et de gagner un deuxième Enfant (AJOUT de l'ENFANT) à Parent existant, le "childEntityList" est toujours l'ancien, je veux dire, l'Enfant n'est pas dans cette Liste, mais inséré dans la DB!

Pourquoi le "childEntityList" est ancien et n'est pas mise à jour?!

Mes Codes:

Le Parent:

@Entity
@Table(schema = "test", name = "Parent")
@XmlRootElement
@NamedQueries({...})
public class Parent implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "A_SEQ")
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID")
    private int id;

    @OneToMany(mappedBy = "p", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<ChildEntity> childEntityList = new ArrayList<ChildEntity>();
...

    public List<ChildEntity> getChildEntityList() {
        return childEntityList;
    }

    public void setChildEntityList(List<ChildEntity> childEntityList) {
        this.childEntityList = childEntityList;
    }

    public void addChildEntityToParent(ChildEntity c) {
        this.childEntityList.add(c);
        if(c.getParent() != this) {
            c.setParent(this);
        }
    }

    public void removeChildEntityFromParent(ChildEntity c) {
        childEntityList.remove(c);
    }
...
}

L'Enfant:

@Entity
@Table( name = "Child" )
@NamedQueries({...})
public class ChildEntity implements Serializable {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY )
    @Column( name = "CHILD_ID" )
    private Long childId;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PARENT_ID")
    private Parent p;
...

    public Parent getParent() {
        return p;
    }

    public void setParent(Parent p) {
        this.p= p;
        if(!p.getChildEntityList().contains(this)) {
            p.getChildEntityList().add(this);
        }
    }

Enregistrez-Code:

    Parent p = new Parent(...);
    ChildEntity c = new ChildEntity(...);
    p.addChildEntityToParent(c);
    childEntityFacade.create(c);

Vue-Code:

    ...
    public doSomething(Parent p) {
        super(p);
    }
    ...
    List<ChildEntity> cList = p.getChildEntityList();
    System.out.print("Size: " + c.size());
    ...

Dans la Vue de Code, la taille de la childList est à chaque fois la même chose-je ajouter un Enfant.
Seulement lorsque je redémarre le Serveur, tous les Enfants de la Mère sont affichés!

Quand est ce que les "childEntityList" dans la Classe Parent est-il rempli?
Est-il automatiquement, en raison de la "@OneToMany"?

Quelqu'un peut m'expliquer et m'aider s'il vous plaît?!

Mise à JOUR:
Après la lecture de quelques articles, j'ai peut-être une solution.
Devrais-je fusionner l'EntityManager à chaque fois quand je ajouter/retirer un Enfant de l'Objet à partir de la Liste des Parents ou ai-je faire autre chose?

Vous devez définir l'enregistrement parent sur l'enfant avant en ajoutant à la collection des enfants. Aussi, je vous recommande fortement de gestion de la bi-directionnelle de la relation à partir d'un côté. Comme il est que vous avez de gestion de la scission entre le parent et l'enfant enregistrements.
En ce qui concerne votre problème d'affichage, je vous recommande l'ajout de l'enregistrement enfant à la mère, puis enregistrez le parent. L'enregistrement d'un enfant comme une transaction distincte ne sera pas automatiquement mise à jour des listes déjà instancié parents.
Je n'ai pas bien compris, je pense. Le Parent est existant, et je tiens à ajouter un ou plusieurs Enfants à la Mère. Je le fais avec mes "addChildEntityToParent" dans la Classe Parent. (La fusion problème a été de m'aider)!
Et j'ai mis de l'objet parent sur l'enfant aussi, dans la "addChildEntityToParent", mais après ajout d'un enfant à l' "childEntityList" dans la classe parent. Je pense que c'est correct ou pas?
Vous n'êtes pas la création d'un nouveau dossier à chaque fois que je suppose, où est votre code pour la création d'un nouvel enfant et de l'ajouter à un parent?

OriginalL'auteur user1956764 | 2013-01-08