Java 如何在JPA中使用集合持久化实体

Java 如何在JPA中使用集合持久化实体,java,jpa,collections,entity,persistence,Java,Jpa,Collections,Entity,Persistence,我试图用JPA来维持一对夫妻关系中的实体。我有两个实体,Proyecto(项目)和Participation(参与)。项目可以有多个参与者。问题是,当我试图将一个参与者坚持到现有项目时 //First, I get the selected project by the user from the database. Proyecto proyecto = proyectoManager.getProyecto(Integer.parseInt((String) session.getAttri

我试图用JPA来维持一对夫妻关系中的实体。我有两个实体,Proyecto(项目)和Participation(参与)。项目可以有多个参与者。问题是,当我试图将一个参与者坚持到现有项目时

//First, I get the selected project by the user from the database.
Proyecto proyecto = proyectoManager.getProyecto(Integer.parseInt((String) session.getAttribute("idProyecto"))); 

//Second, I create and set the Participacion parameters, including the project.
Participacion participacion = new Participacion();
participacion.setIdProyecto(proyecto);
participacion.setLogin(usuario);
participacion.setPorcParti(Integer.parseInt(request.getParameter("porc")));

//Finally I persist participacion with his respective project
proyectoManager.addParticipacion(participacion);

//Here, I'm trying to get the project to check if his Participacion collection contains the new participation.
proyecto = proyectoManager.getProyecto(Integer.parseInt((String) session.getAttribute("idProyecto")));
问题是在我第二次从数据库恢复项目时,因为他的参与集合不包含新的参与。我尝试过使用edit()方法,甚至在persist()方法之后使用flush,但都不起作用

下次我部署企业应用程序时,项目包含了他各自的参与,包括新的参与,但我在第一次持久化之后需要它,而不需要再次部署


有人能帮我吗?谢谢。

你如何告诉JPA你想要收藏

我主要在域对象上使用注释,通常只添加如下内容:

    @OneToMany(cascade=CascadeType.ALL)
    proyecto.addParticipation(participation);
    proyectoManager.saveProyecto(proyecto);
这个(或类似的)问题在这个网站上已经被回答了很多次

编辑

另外,从上面的代码示例来看,您似乎没有将参与实例添加到项目中。我认为你需要这样的东西:

    @OneToMany(cascade=CascadeType.ALL)
    proyecto.addParticipation(participation);
    proyectoManager.saveProyecto(proyecto);

完成关联。

谢谢您的回答,这是我在项目实体中的内容:
@OneToMany(cascade=CascadeType.ALL,mappedBy=“idProyecto”,fetch=FetchType.EAGER)
好的,从上面的代码示例中,我不清楚您是否将参与添加到项目中。相反,您似乎在向项目管理器(我想它不是域对象?)添加参与。项目管理器是一个无状态java bean,它调用em.persist(实体)。我认为坚持参与他各自的项目,也是隐含在项目中的。不,这是不够的。。。似乎您正在设置
Proyecto
Participation
之间的连接,这是双向导航的目的。这还需要在参与对象中添加注释。我现在记不起正确的注释,但是你很容易在别处找到它。谢谢你,但我不明白这是否还不够,为什么我第二次从DB部署和恢复项目时包含了他在集合中的所有参与。看来这个坚持是正确的。