2010-11-09 5 views
0

Tout d'abord, comme vous pouvez le voir, je travaille dans Java et spécifiquement dans l'EDI NetBeans. Donc, j'ai une personne de classe qui étend deux classes: formateur et athlète.Comment faire une liste (contenant des objets) persistante

Dans l'ensemble, je crée une nouvelle ArrayList list = new ArrayList();

puis, je remplir la liste des objets que je l'ai créé et mis à la persistance.

Trainer tr1=  new Trainer("George","White","England",5665); 
Athlete ath1=  new Athlete("Mairy","Willians","France",1,'f',"21/3/1988",68,172,"France"); 
list.add(ath1); 
Athlete ath2=new Athlete("Iggy","Black","USA",2,'f',"10/4/1988",70,175,"U.S.A."); 
list.add(ath2); 
tr1.setAthletes(list); 

(Ces champs sont bien définis dans le constructeur de l'entraîneur classes et athlète respectivement.

je les fais aussi persistants.

em2.persist(tr1); 
em2.persist(ath1); 
em2.persist(ath2); 

Mais à la fin, malgré Les athlètes et les entraîneurs étant persistants, les listes que j'ai ne sont pas

C'est là que mon problème commence, je veux que ces listes soient persistantes

Ici, ces listes fonctionnent et sont testées, mais elles sont bonnes à utiliser au niveau Java et non au niveau ObjectDB.

Dois-je recommencer?

Toute personne qui peut m'aider avec ce gars? J'ai vraiment besoin d'aide, c'est sérieux.

PS: Bien sûr, je l'ai fait les importations nécessaires tels que

import javax.persistence.*; 
import java.util.*; 

EntityManagerFactory emf2 = Persistence.createEntityManagerFactory("$objectdb/db/personas2.odb"); 
EntityManager em2 = emf2.createEntityManager(); 
em2.getTransaction().begin(); 
em2.close(); 
emf2.close(); 

Répondre

0

Mais à la fin, malgré des athlètes et des formateurs étant persistante, les listes que j'ai ne sont pas.

Quelques idées:

  • Assurez-vous de commit la transaction (bien que vous avez mentionné que les entités sont conservées).

  • Si votre un à plusieurs association entre Trainer et Athlete est bidirectionnel (montrer peut-être vos entités), assurez-vous de régler la « autre » côté du lien correctement, comme ceci:

    Trainer tr1 = new Trainer("George","White","England",5665); 
    Athlete ath1 = new Athlete("Mairy","Willians","France",1,'f',"21/3/1988",68,172,"France"); 
    ath1.setTrainer(tr1); // set the other side of the link 
    list.add(ath1); 
    ... 
    tr1.setAthletes(list); 
    

    ou ajouter une méthode dans votre entité (en Trainer ici):

    public void addToAthletes(Athlete athlete) { 
        athlete.setTrainer(this); 
        this.athletes.add(athlete); 
    } 
    

    et remplacer les lignes ci-dessus avec:

    Trainer tr1 = new Trainer("George","White","England",5665); 
    Athlete ath1 = new Athlete("Mairy","Willians","France",1,'f',"21/3/1988",68,172,"France"); 
    tr1.addToAthletes(ath1); 
    
+0

Merci, semble assez bon et avec peu de travail que je dois être parfait. Merci beaucoup Pascal Thivent! Btw belle blague sur wtf/minute métrique. :)))) – user501625

Questions connexes