/**
  * Triggers UnitOfWork valueholders directly without triggering the wrapped valueholder (this).
  *
  * <p>When in transaction and/or for pessimistic locking the UnitOfWorkValueHolder needs to be
  * triggered directly without triggering the wrapped valueholder. However only the wrapped
  * valueholder knows how to trigger the indirection, i.e. it may be a batchValueHolder, and it
  * stores all the info like the row and the query. Note: This method is not thread-safe. It must
  * be used in a synchronized manner. The batch value holder must use a batch query relative to the
  * unit of work, as the batch is local to the unit of work.
  */
 public Object instantiateForUnitOfWorkValueHolder(UnitOfWorkValueHolder unitOfWorkValueHolder) {
   UnitOfWorkImpl unitOfWork = unitOfWorkValueHolder.getUnitOfWork();
   ReadQuery localQuery = unitOfWork.getBatchQueries().get(this.query);
   if (localQuery == null) {
     localQuery = (ReadQuery) this.query.clone();
     unitOfWork.getBatchQueries().put(this.query, localQuery);
   }
   return this.mapping.extractResultFromBatchQuery(
       localQuery,
       this.parentCacheKey,
       this.row,
       unitOfWorkValueHolder.getUnitOfWork(),
       this.originalQuery);
 }