Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa eclipselink merge()不带初始选择_Jpa_Jpa 2.0_Eclipselink - Fatal编程技术网

Jpa eclipselink merge()不带初始选择

Jpa eclipselink merge()不带初始选择,jpa,jpa-2.0,eclipselink,Jpa,Jpa 2.0,Eclipselink,我正在尝试使用eclipselink执行一个合并(实体),我想向eclipse表明这是一个更新还是插入,因此它不必执行初始的select查询。由于在这方面取得的进展,我有以下几点: UnitOfWorkImpl uow = (UnitOfWorkImpl) ((EntityManagerImpl) em.getDelegate()).getUnitOfWork(); if (dbObj.isInDB()) { uow.updateObject(dbObj); } else {

我正在尝试使用eclipselink执行一个
合并(实体)
,我想向eclipse表明这是一个更新还是插入,因此它不必执行初始的select查询。由于在这方面取得的进展,我有以下几点:

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

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

但是,我得到了以下信息:

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

if (dbObj.isInDB())
{
    uow.updateObject(dbObj);
}
else
{
    uow.insertObject(dbObj);
}
AbstractSession session = ((EntityManagerImpl) em.getDelegate()).getUnitOfWork().getParent();
if (dbObj.getLastModifiedTime().isAfter(lastUpdated))
{
    if (dbObj.isInDB())
    {
        session.updateObject(dbObj);
    }
    else
    {
        session.insertObject(dbObj);
    }
}
org.eclipse.persistence.exceptions.QueryException: 异常描述:在UnitOfWork期间无法写入对象,必须注册它们。 查询:UpdateObject查询

我的方法正确吗?如果是,我如何更正错误


感谢

感谢回答的作者,工作解决方案如下,跟踪自己进入数据库的内容,“他们”是eclipselink实体经理:

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

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