我正在使用Apache Camel从Web服务中检索信息。检索到的信息将使用JAXB进行解组并映射到实体类,以将信息保存到关系数据库(在本例中为Oracle)中。
检索到的信息之间存在关联。首先,检索到的所有人都涉及项目。在第二个请求中,检索所有项目。每个项目都有一个所有者,它指的是一个人的身份。
为了使事情更清楚,这里有一些Web服务的示例响应。
人
<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>
以下实体(仅显示摘录)用于将XML映射到JAXB并将其持久保存到数据库:
@Entity
@NamedQuery(name="Person.findAll", query="SELECT p FROM Person p")
@XmlType(name="person")
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String fullname;
//bi-directional many-to-one association to Project
@OneToMany(mappedBy="person")
private List<Project> projects;
...
@XmlElement(name="ixPerson")
public void setId(long id) {
this.id = id;
}
@XmlElement(name="sFullName")
public void setFullname(String fullname) {
this.fullname = fullname;
}
}
项目实体:
@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>
持久化项目的表仅将人的id作为所有者,ixPerson始终为0.
如何获得对类/实体Person的正确引用,以便我可以使用JPA保留它?
将JAXB和JPA混合在一个类中是否可以实现这一点,还是必须将其拆分,以实现我的目标?