2

我正在尝试merge(entity)使用 eclipselink 执行,并且我想向 eclipse 表明这将是更新还是插入,因此它不必执行初始选择查询。感谢在这个问题上取得的进展,我有以下几点:

UnitOfWorkImpl uow = (UnitOfWorkImpl) ((EntityManagerImpl) em.getDelegate()).getUnitOfWork();

if (dbObj.isInDB())
{
    uow.updateObject(dbObj);
}
else
{
    uow.insertObject(dbObj);
}

但是,我得到以下信息:

org.eclipse.persistence.exceptions.QueryException: Exception Description: Objects cannot be written during a UnitOfWork, they must be registered. Query: UpdateObjectQuery

我以正确的方式接近这个吗?如果是这样,我该如何纠正错误?

谢谢

4

1 回答 1

5

感谢此处答案的作者,工作解决方案如下,我自己跟踪数据库中的内容,其中“em”是 eclipselink 实体管理器:

AbstractSession session = ((EntityManagerImpl) em.getDelegate()).getUnitOfWork().getParent();
if (dbObj.getLastModifiedTime().isAfter(lastUpdated))
{
    if (dbObj.isInDB())
    {
        session.updateObject(dbObj);
    }
    else
    {
        session.insertObject(dbObj);
    }
}

于 2013-11-17T09:29:44.130 回答