2010-10-03 7 views
0

dans mon application J'ai des utilisateurs qui ont des fichiers. Le UserVO a le mapping suivant:Comment conserver une mise à jour de @OneToMany avec Hibernate?

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "users") 
public Set<Files> getFiles() 
{ 
    return this.files; 
} 

Puis j'ai un HibernateDAO avec la méthode de mise à jour suivante:

public void update(T vo) 
{ 
    try 
    { 
     startTransaction(); 
     getSession().clear(); 
     getSession().update(vo); 
     closeTransaction(); 
    } 
    catch (HibernateException e) 
    { 
     rollbackTransaction(); 
     e.printStackTrace(); 
    } 
} 

Lorsque certaines valeurs du fichier d'un utilisateur ont changé, je veux mettre à jour mon fichier. Par conséquent j'utiliser:

 daoFiles.update(file); // this uses the HibernateDAO update! 
     UserDAO daoUser = UserDAO.getInstance(); 
     daoUser.update(user); //... also a HibernateDAO update 

Les modifications apportées par fichier sont enregistrées dans la base de données, mais si je veux afficher les fichiers d'un utilisateur, alors je ne peux pas les modifications des fichiers parce que les anciennes valeurs ont été affichées. Seulement si je reçois le fichier VO directement je peux voir les nouvelles valeurs. Il semble donc que l'utilisateur ne reconnaisse pas la mise à jour d'un fichier.

Est-ce que quelqu'un sait que le problème est?

Meilleurs voeux!

Benny

Répondre

0

je suppose que le problème est que votre userVO et la base de données désynchronisés. Vous pouvez essayer de recharger l'objet userVO à partir de la base de données. Mais je préférerais utiliser la fonctionnalité de persistance transitive hibernates. Vous pouvez enregistrer les fichiers en les ajoutant à l'objet utilisateur et en mettant à jour l'objet utilisateur. Jetez un oeil à transitive persistence.

Questions connexes