Reputation: 29
I have the below xml:
<business_partner_list>
<business_partner>
<business_partner_id>2004</business_partner_id>
<business_partner_name>S. C. Johnson & 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 & MEN'S CASUAL</department_name>
</department>
<business_partner/>
<business_partner>
<business_partner_id>3821</business_partner_id>
<business_partner_name>Johnson & 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>
I have parsed it using JAXB and I'm able to parse it. I'm using Hibernate and jpa to persist in DB.
So, it creates two Entity classes:
BusinessPartner.java and Department.java
These two entities should be persisted to DB using Hibernate and 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;
}
Now what I want is when I persist BusinessPartner.java using hibernate and jpa, the mapping should happen automatically. But I'm getting the Exception:
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)
Which means I need to persist Department.java first and then BusinessPartner.java.
But is there any way I can persist BusinessPartner.java and Hibernate will do the rest by itself.
Upvotes: 0
Views: 189
Reputation: 4165
Try changing the BusinessPartnerType to this:
@OneToMany(cascade=CascadeType.ALL, mappedBy="businessPartnerType")
protected List<DepartmentType> department;
This should cause the DepartmentType objects to be automatically persisted.
Upvotes: 1