簡體   English   中英

JAXB解組實體-引用為null

[英]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子實體。

找到一個解決方案:

方法afterUnmarshalBElement.java

public void afterUnmarshal(Unmarshaller u, Object parent) {
   this.a = (AElement)parent;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM