Ich habe Master Kind Entitätsbeziehung wo Master Entität Anfrage und Kind Entität ist requestitemIllegal mit Beziehung CascadeType.ALL JPA
ich die Beziehung in folgender Weise
@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();
Es wirft> definiert haben java.lang.IllegalStateException mit Grunde
„Keine Transaktion ist derzeit aktiv“ Allerdings, wenn ich die Master-Kind-Beziehung wie diese
geändertes spielt dann keine Ausnahme auslösen, howver nichts in DB aktualisiert @OneToMany (mappedBy = „iagrequest“, holen = FetchType.EAGER)
Sieht aus wie ich bin etwas fehlt oder meine Grundlagen sind nicht klar Bitte geben Hinweise Vielen Dank im Voraus
änderte ich den Code folgenden auch
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);
}
Aber ich immer noch die gleichen Fehler
Hör auf zu denken, dass nur Aufrufe persistieren() eine Transaktion benötigen. Starten Sie eine Transaktion, bevor Sie irgendetwas mit Hibernate-Entitäten tun, und begehen Sie, nachdem Sie alles getan haben, was Sie damit zu tun hatten. –
'this.iagrequestitemDao.persist (updatedReqItem);' -> Wie kontrollierst du die Transaktion in iagrequestitemDao? – fg78nc
Vielen Dank für Ihre Antwort. Ich habe die Logik wie folgt nun – user1670018