繁体   English   中英

如何使列表(包含对象)持久化

[英]How to make a list (containing of objects) persistent

首先,如您所见,我使用Java,特别是NetBeans IDE。 因此,我有一个Person类,它扩展了两个类:Trainer和Athlete。

首先,我创建一个新的ArrayList list = new ArrayList();

然后,我将创建和持久化的对象填充到列表中。

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);

(这些字段分别在培训师和运动员课程的构造函数中定义好。

我也让他们坚持不懈。

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

但是最后,尽管运动员和培训师坚持不懈,但我所拥有的名单却没有。

多数民众赞成在我的问题开始的地方,我希望这些列表是持久的。

在这里,这些列表正在运行并经过测试,可以,但是可以在Java级别而不是ObjectDB级别使用。

我应该重新开始吗?

有谁可以帮我解决这些问题吗? 我真的需要帮助,这很严重。

PS:当然,我已经完成了所需的导入,例如

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();

但是最后,尽管运动员和培训师坚持不懈,但我所拥有的名单却没有。

一些想法:

  • 确保commit事务(尽管您提到实体已保留)。

  • 如果您在TrainerAthlete之间的一对多关联是双向的(也许显示您的实体),请确保正确设置链接的“另一”侧,如下所示:

     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); 

    或在您的实体中添加方法(在此处的Trainer ):

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

    并将以上行替换为:

     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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM