I have master child entity relationship where master entity is request and child entity is requestitem
I have defined the relationship in them in following way
@OneToMany(mappedBy="iagrequest", cascade={CascadeType.ALL},fetch=FetchType.EAGER)
private List<IagRequestItem> iagrequestitems;
In my logic I am trying to update the existing entities like this,
String ret = "";
EntityTransaction trans = null;
IagRequest existingDB = this.findById(request.getAccRequestId());
List <IagRequestItem> updatedReqItems = new ArrayList<IagRequestItem>();
List <IagRequestItem> existingReqItems = new ArrayList<IagRequestItem>();
try {
updatedReqItems = request.getIagrequestitems();
existingReqItems = existingDB.getIagrequestitems();
trans = this.entityManager.getTransaction();
for(int i=0;i<updatedReqItems.size();i++) {
IagRequestItem updatedReqItem = updatedReqItems.get(i);
IagRequestItem existingReqItem = existingReqItems.get(i);
updatedReqItem.setAccRequestItemId(existingReqItem.getAccRequestItemId());
updatedReqItem.setIagrequest(existingReqItem.getIagrequest());
updatedReqItem.setRequestItemConnector(existingReqItem.getRequestItemConnector());
updatedReqItem.setRequestItemName(existingReqItem.getRequestItemName());
updatedReqItem.setRequestItemValidFrom(existingReqItem.getRequestItemValidFrom());
updatedReqItem.setRequestItemValidTo(existingReqItem.getRequestItemValidTo());
updatedReqItem.setRequestItemType(existingReqItem.getRequestItemType());
updatedReqItem.setRequestItemVersion(existingReqItem.getRequestItemVersion());
updatedReqItems.set(i, updatedReqItem);
existingDB.getIagrequestitems().set(i, updatedReqItem);
this.iagrequestitemDao.persist(updatedReqItem);
//this.iagrequestitemDao.persist(updatedReqItem);
}
trans.begin();
this.entityManager.persist(existingDB);
trans.commit();
It throws >java.lang.IllegalStateException with reason
"No transaction is currently active" However if I changed the master child relationship like this
Then it does not throw any exception ,howver nothing is updated in DB @OneToMany(mappedBy="iagrequest", fetch=FetchType.EAGER)
Looks like I am missing something or my fundamentals are not clear Please provide guidance Thanks in advance
I changed the code to following as well
trans = this.entityManager.getTransaction();
trans.begin();
for(int i=0;i<updatedReqItems.size();i++) {
IagRequestItem updatedReqItem = updatedReqItems.get(i);
IagRequestItem existingReqItem = existingReqItems.get(i);
updatedReqItem.setAccRequestItemId(existingReqItem.getAccRequestItemId());
updatedReqItem.setIagrequest(existingReqItem.getIagrequest());
updatedReqItem.setRequestItemConnector(existingReqItem.getRequestItemConnector());
updatedReqItem.setRequestItemName(existingReqItem.getRequestItemName());
updatedReqItem.setRequestItemValidFrom(existingReqItem.getRequestItemValidFrom());
updatedReqItem.setRequestItemValidTo(existingReqItem.getRequestItemValidTo());
updatedReqItem.setRequestItemType(existingReqItem.getRequestItemType());
updatedReqItem.setRequestItemVersion(existingReqItem.getRequestItemVersion());
updatedReqItems.set(i, updatedReqItem);
existingDB.removeIagrequestitem(existingReqItem);
existingDB.addIagrequestitem(updatedReqItem);
this.iagrequestitemDao.persist(updatedReqItem);
//this.iagrequestitemDao.persist(updatedReqItem);
}
But I still get the same error