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