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

Java 如何使列表(包含对象)持久化,java,jpa,orm,objectdb,Java,Jpa,Orm,Objectdb,首先,正如您所看到的,我使用Java,特别是NetBeans IDE。 所以,我有一个班上的人,扩展了两个班:教练和运动员 在main中,我创建了一个新的ArrayList list=new ArrayList() 然后,我用我创建并持久化的对象填充列表 Trainer tr1= new Trainer("George","White","England",5665); Athlete ath1= new Athlete("Mairy","Willians","Fran

首先,正如您所看到的,我使用Java,特别是NetBeans IDE。 所以,我有一个班上的人,扩展了两个班:教练和运动员

在main中,我创建了一个新的
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);
(这些字段分别在培训师和运动员课程的构造函数中定义良好

我也让他们坚持不懈

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);
但最终,尽管运动员和教练们坚持不懈,我列出的名单却并非如此

这就是我的问题开始的地方,我希望这些列表是持久的

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
    事务(尽管您提到实体是持久化的)

  • 如果
    培训师
    运动员
    之间的一对多关联是双向的(可能显示您的实体),请确保正确设置链接的“另一侧”,如下所示:

    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
    此处):

    并将上述行替换为:

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

谢谢,似乎已经足够好了,而且只要稍加努力,我就可以做到完美。非常感谢帕斯卡·Thivent!顺便说一句,关于wtf/分钟度量的笑话真不错。:)