[英]JAXB Unmarshalling Entities - References null
我有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處於一對多關系。 XML應該如下所示:
<A>
<B></B>
<B></B>
</A>
如果我取消編組xml,則將其映射到我的JPA類並將其持久保存到我的數據庫中, 除了引用之外,所有內容都正確存儲。 這意味着, B
存儲沒有外鍵A
在數據庫中。
我在Hibernate中使用JPA。 遵循我的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;
...
}
看來我必須為每個B分配適當的A。這解決了我的問題。
a.getB().forEach(b -> b.setA(a));
我不知道這是一個好的解決方法嗎? 特別是因為我還有B
子實體。
找到一個解決方案:
方法afterUnmarshal
類BElement.java
public void afterUnmarshal(Unmarshaller u, Object parent) {
this.a = (AElement)parent;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.