我有2个映射类(类似于JPA类):
AElement.java
@XmlType(propOrder = {"name", "children", })
@XmlRootElement(name = "a")
@XmlAccessorType( XmlAccessType.PROPERTY)
public class AElement implements Serializable {
private String name;
private List<BElement> children;
@XmlElement(name = "metadatum")
public List<BElement> getChildren(){
return children;
}
...
}
BElement.java
@XmlRootElement(name = "b")
@XmlType(propOrder = {"name"})
public class BElement implements Serializable{
private String name;
private AElement parent;
...
}
A和B属于 OneToMany 关系。 XML应如下所示:
<A>
<B></B>
<B></B>
</A>
如果我解组xml,请将其映射到我的JPA类并将其保存到我的数据库中
正确存储,但我的引用。这意味着B
在没有外键的情况下存储到数据库中的A
。
我正在使用JPA和Hibernate。在我的JPA课程之后:
A.java
@Entity
public class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String name;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "parent")
private List<B> children;
public List<B> getChildren(){
return children;
}
...
}
B.java
@Entity
public class B implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String name;
@ManyToOne(optional = true)
@JoinColumn(name = "a_id", referencedColumnName = "id")
private A parent;
...
}
答案 0 :(得分:0)
看起来我必须为每个B分配适当的A.这解决了我的问题。
a.getB().forEach(b -> b.setA(a));
我不知道这是一个好的解决方法吗?特别是因为我有其他实体是B
的孩子。
答案 1 :(得分:0)
找到解决方案:
类 BElement.java
中的方法afterUnmarshal
public void afterUnmarshal(Unmarshaller u, Object parent) {
this.a = (AElement)parent;
}