Salut à tous,

J essaie dans un premier temps de vous exposer la chose ...

Une classe Materiel (objet graphique) + attribut de type Composant (Pojo Hibernate).

Mon appli. est constituée d' un ensemble de Materiel, et donc ont leur composant associé.

Lorsque je modifie les proprietes d un materiel, celles si sont répercutées dans le composant.

Lorsque je sauve l'application, je parcoure l' ensemble des Materiels , et je session.save (monMateriel.getComposant());

Tout fonctionne nickel ... dans un premier temps , a savoir lors de la premiere sauvegarde.

Exemple:
Je plug des materiels dans mon appli. je modifie les proprietes, etc ... ensuite je sauve ... Ca se met a jour dans la BD sans probleme.
Je modifie je ressauve, ca se met a jour sans probleme aussi.

Par contre, imaginons que j' ai sauvé sous le nom : 'brol'.
Ensuite je crée un nouveau panneau , j ajoute des Materiel, et ensuite je sauve, sous le nom 'brol'.

Je demande donc si l'on veut ecraser l'ancienne sauvegarde.
Si on répond oui, je supprime les composants de la sauvegarde de cette facon

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public static void supprimeSauvegarde(String save) throws HibernateException {
        Session session = HibernateUtil.currentSession();
        session.beginTransaction();
        List<Composant> tmp1 = session.createQuery("from Composant where sauvegarde LIKE '"+save+"'").list();
        for (Composant c : tmp1)
            session.delete(c);
        session.getTransaction().commit();
    }
Cela fonctionne sans aucun probleme, mais lorsque je resauve a nouveau, j' obtiens cette erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
xception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: Found two representations of same collection: simulator.hibernate.pojo.Composant.proprietes
Il faut s'avoir qu' un Composant est composé entre autres, d' un Set<Propriete> , qui donc se sauve sans aucun probleme en BD lors de la premiere sauvegarde.

Mais si je delete et resauve, ca plante ... je comprend pas pourquoi il me dit que j' ai deux representations de la chose.

Voici, pour info (si utile) comment je sauve:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
private void saveEtat(String sauvegarde) {
        save = sauvegarde;
        for (Object o : Tableau.getInstance().getGraph().getVertices()) {
            Materiel m = (Materiel)o;
            m.getComposant().setSauvegarde(sauvegarde);
            Point2D p = Tableau.getInstance().getVisualization().getGraphLayout().getLocation(m);
            m.getComposant().setPosX((int)p.getX());
            m.getComposant().setPosY((int)p.getY());
            HibernateRequetes.saveObject(m.getComposant());
        }
}
 
public static void saveObject (Object comp) throws HibernateException {
        Session session = HibernateUtil.currentSession();
        session.beginTransaction();
        session.save(comp);
        session.flush();
        session.getTransaction().commit();
    }
Et donc ce code passe sans probleme ... sauf si j' apelle : supprimeSauvegarde avant ...

Merci de m'aiguiller car là je comprend trop pas ... et ca m' enerve car la sauvegarde en soit se passe sans aucun probleme ...

Merci d'avance