Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何映射与JAXB和JPA的一对多关系_Java_Xml_Jpa_Jaxb - Fatal编程技术网

Java 如何映射与JAXB和JPA的一对多关系

Java 如何映射与JAXB和JPA的一对多关系,java,xml,jpa,jaxb,Java,Xml,Jpa,Jaxb,我正在使用ApacheCamel从Web服务检索信息。检索到的信息用JAXB解包并映射到实体类,以将信息持久化到关系数据库(在本例中为Oracle)中 检索到的信息之间存在关系。首先,检索到的所有人员都参与了项目。在第二个请求中,检索所有项目。每个项目都有一个所有者,该所有者引用一个人的id 为了让事情更清楚,这里有一些来自webservice的示例响应 人员: <response> <people> <person> <ixPerson

我正在使用ApacheCamel从Web服务检索信息。检索到的信息用JAXB解包并映射到实体类,以将信息持久化到关系数据库(在本例中为Oracle)中

检索到的信息之间存在关系。首先,检索到的所有人员都参与了项目。在第二个请求中,检索所有项目。每个项目都有一个所有者,该所有者引用一个人的id

为了让事情更清楚,这里有一些来自webservice的示例响应

人员:

<response>
 <people>
  <person>
     <ixPerson>2</ixPerson>
     <sFullName>XXX</sFullName>
     ...
  </person>
  <person>
     <ixPerson>3</ixPerson>
     <sFullName>YYY</sFullName>
     ...
  </person>
 </people>
</response>
<response>
 <projects>
  <project>
     <ixProject>33</ixProject>
     <sProject>My Project 1</sProject>
     <ixPersonOwner>2</ixPersonOwner>
     ...
  </project>
  <project>
     <ixProject>34</ixProject>
     <sProject>My Project 2</sProject>
     <ixPersonOwner>3</ixPersonOwner>
     ...
  </project>
 </projects>
</response>
@Entity
@NamedQuery(name="Project.findAll", query="SELECT p FROM Project p")
@XmlType(name="project")
public class Project implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private long id;

    private String name;

    //bi-directional many-to-one association to Person
    @ManyToOne
    @JoinColumn(name="OWNER")
    private Person person;

    @XmlElement(name="ixProject")
    public void setId(long id) {
       this.id = id;
    }

    @XmlElement(name="sProject")
    public void setName(String name) {
       this.name = name;
    }

    @XmlElement(name="ixProjectOwner")
    public void setPerson(Person person) {
      this.person = person;
    }
}
所有人员都已正确解组,并且可以持久化到数据库中。但当我解组项目时,解组的数据如下所示:

<project>
   <ixProject>12</ixProject>
   <sProject>Project 3</sProject>
   <ixPersonOwner>
      <ixPerson>0</ixPerson>
   </ixPersonOwner>
</project>

12
项目3
0
用于持久化项目的表仅采用作为所有者的人员的id,并且ixPerson始终为0

如何获得对类/实体Person的正确引用,以便我可以将其与JPA保持一致

将JAXB和JPA混合在一个类中,这是可能的,还是我必须拆分它才能实现我的目标

<project>
   <ixProject>12</ixProject>
   <sProject>Project 3</sProject>
   <ixPersonOwner>
      <ixPerson>0</ixPerson>
   </ixPersonOwner>
</project>