如何读取事务中尚未提交的更新值?

时间:2015-08-28 04:12:48

标签: java postgresql transactions ebean

我正在使用Avaje Ebean API从PostgreSQL DB获取CRUD数据。这是我的代码:

import com.avaje.ebean.Ebean;
import com.avaje.ebean.Query;
import com.avaje.ebean.SqlQuery;
import com.avaje.ebean.SqlUpdate;
...

class Example {
    private void insertStockItem(PickingFieldProductItemDto dto, StockDao stockDao) {
        try {
            Ebean.beginTransaction();

            List<PickingFieldProductItem> productList = dto.getItemList();
            for(PickingFieldProductItem product : productList) {
                StockDto stockDto = buildStockDto(product);
                Stock stock = stockDao.getStockItem(stockDto.ID);
                // stock.Quantity is always 500 
                if(stock != null) {
                    if(stock.getQuantity().compareTo(product.getOutcomingQuantity()) == 0)
                        stockDao.deleteStock(stockDto);
                    else {
                        int updateQuantity = stock.getQuantity() - product.getOutcomingQuantity();
                        // updateQuantity = 300 and I will update this value to stock table
                        int identity = stockDao.updateStock(stockDto.ID, updateQuantity);
                    }
                }
            }

            Ebean.commitTransaction();
        } catch (BusinessException e) {
            Ebean.rollbackTransaction();
        } finally {
            Ebean.endTransaction();
        }
    }
}

我的问题是:

在第一个循环中,我得到了stock对象,看到Quantity属性的值是500,然后我用另一个值(300)更新它。 update语句成功运行,我检查了identity var,它返回值为1。

但是在第二个循环中,我再次得到了股票对象,现在Quantity属性的值仍然是500.我的预期是300.假设productList只有2个元素。

任何人都可以帮助我如何获得预期的价值?有可能吗?

感谢。

0 个答案:

没有答案