Updating in reference to the old value in Entity Listener

I am trying to update on the basis of old value in EntityLister but getting the following exception


java.lang.IllegalStateException: Query delegate has already been created
	at com.haulmont.cuba.core.sys.QueryImpl.checkState(QueryImpl.java:188)
	at com.haulmont.cuba.core.sys.QueryImpl.setQueryString(QueryImpl.java:553)
	at com.haulmont.cuba.core.sys.QueryImpl.setQueryString(QueryImpl.java:51)
	at com.company.listener.proc.BidInvitePrEntityListener.updateEntries(BidInvitePrEntityListener.java:82)
	at com.company.listener.proc.BidInvitePrEntityListener.onBeforeUpdate(BidInvitePrEntityListener.java:38)

here is the service code:


   private void updateEntries(BidInvitePr entity, EntityManager em) {

        if(entity.getPurchaseRequisition() != null){

            PurchaseRequisition oldPr = (PurchaseRequisition) persistence.getTools().getOldValue(entity, "purchaseRequisition");

            TypedQuery<PurchaseRequisition> query = em.createQuery("select e from erp$PurchaseRequisition e " +
                    "where e.id = ?1", PurchaseRequisition.class);
            query.setParameter(1, entity.getPurchaseRequisition().getId());

            PurchaseRequisition pr = query.getFirstResult();
            pr.setBidInvite(entity.getBidInvite());

            if (oldPr != null) {
                TypedQuery<PurchaseRequisition> queryOld = em.createQuery("select e from erp$PurchaseRequisition e " +
                        "where e.id = ?1", PurchaseRequisition.class);
                       queryOld.setParameter(1, oldPr.getId());

                PurchaseRequisition prOld = queryOld.getFirstResult();
                prOld.setBidInvite(null);

            }

        }
    }

Thanks for any help.

I have found the solution,
merge helped.


PurchaseRequisition oldPReq = em.merge(oldPr);