2010-06-25 4 views
1

Mon problème est que j'ai un objet A qui contient une liste de B ObjetsUne question flush() après la fusion d'une entité

@Entity 
class A { 

    @OneToMany(cascade={CascadeType.MERGE}) 
    List<B> list; 

} 

Quand je fais un « fusionner » d'un objet A et ensuite appeler " vider "à l'intérieur d'une méthode EJB sans état

em.merge(a); //a is of class A 
em.flush(); //doesn't flush "list" 

cela ne fonctionne pas réellement. les identifiants des objets B de "liste" ne sont pas définis.

Mais la persistance et le rinçage travail

em.persist(a); 
em.flush(); // it works! 

Les ids de l'objet B de "liste" sont définis. J'utilise EclipseLink. Est-ce que quelqu'un sait ce qui pourrait se passer?

+0

En raison du bruit dans les réponses ci-dessous (quelques amis?), Je me demande si la question est sérieuse et jusqu'à ce que j'obtienne la confirmation, je ne passerai pas plus de temps là-dessus. Si ces gens sont vos amis, vous devriez les éduquer un peu. –

+0

Cette question est une sorte d'aimant de spam. – bmargulies

+0

@Pascal, @bmargulies; Nettoyé et protégé de toute autre bêtise. Merci pour le drapeau. –

Répondre

0

cela ne fonctionne pas car les identifiants des objets B faisant partie de la liste "liste" ne sont pas définis.

Vous devriez éviter d'utiliser l'identifiant pour mettre en œuvre equals/hashCode, le contrat ne devrait pas changer alors que les objets sont dans le List. Quoi qu'il en soit, je ne peux pas reproduire votre problème avec EclipseLink 2.0: une fusion sur A cascades un insert sur B lorsque j'ajoute un B à la liste.

Questions connexes