2016-03-15 63 views
0

堅持XML到DB我有下面的XML:無法使用JAXB

<business_partner_list> 
    <business_partner> 
     <business_partner_id>2004</business_partner_id> 
     <business_partner_name>S. C. Johnson &amp; Sons Inc</business_partner_name> 
     <last_changed_date>2016-02-02T04:04:04</last_changed_date> 
     <department> 
      <department_id>242</department_id> 
      <department_name>TARGET.COM HARDLINES B</department_name> 
     </department> 
     <department> 
      <department_id>98</department_id> 
      <department_name>ADULT ATHLETIC &amp; MEN'S CASUAL</department_name> 
     </department> 
<business_partner/> 
<business_partner> 
     <business_partner_id>3821</business_partner_id> 
     <business_partner_name>Johnson &amp; Johnson</business_partner_name> 
     <last_changed_date>2016-02-02T04:04:04</last_changed_date> 
     <department> 
      <department_id>245</department_id> 
      <department_name>OTC-PERSONAL CARE</department_name> 
     </department> 
     <department> 
<business_partner/> 
</business_partner_list> 

我一直在使用JAXB解析它,我能夠解析它。我使用Hibernate和jpa來堅持數據庫。

所以,它創建了兩個實體類:

BusinessPartner.java和Department.java

這兩個實體應使用Hibernate和JPA持久保存到數據庫。

BusinessPartner.java

@Entity(name="businessPartnerType") 
public class BusinessPartnerType { 

    /*@Id 
    @GeneratedValue 
    protected long businessPartnerTypeId;*/ 
    @Id 
    @XmlElement(name = "business_partner_id", required = true) 
    protected BigInteger businessPartnerId; 
    @XmlElement(name = "business_partner_name", required = true) 
    protected String businessPartnerName; 
    @OneToMany(mappedBy="businessPartnerType")/*(targetEntity=DepartmentType.class)*/ 
    protected List<DepartmentType> department; 
} 

Department.java

@Entity(name="departmentType") 
public class DepartmentType { 

    @Id 
    @XmlElement(name = "department_id", required = true) 
    protected BigInteger departmentId; 
    @XmlElement(name = "department_name", required = true) 
    protected String departmentName; 
    @XmlTransient 
    @ManyToOne(cascade=CascadeType.ALL) 
    protected BusinessPartnerType businessPartnerType; 
} 

現在我想的是,當我使用Hibernate和JPA持續BusinessPartner.java,映射應該自動發生。但我得到例外:

javax.persistence.EntityNotFoundException: Unable to find target.jaxb.beans.DepartmentType with id 242 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:145) 
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) 
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:278) 
    at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121) 
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89) 
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1142) 
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1025) 
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:632) 

這意味着我需要首先堅持Department.java,然後BusinessPartner.java。

但是,有沒有什麼辦法可以堅持BusinessPartner.java,而Hibernate會自行完成剩下的工作。

+2

請添加你的持久代碼。 –

回答

1

嘗試改變BusinessPartnerType這樣:

@OneToMany(cascade=CascadeType.ALL, mappedBy="businessPartnerType") 
protected List<DepartmentType> department; 

這應該引起DepartmentType對象是自動持久。

+0

非常感謝Petter。有效。錯過我錯過了它。 – Sandy