org.eclipse.persistence.internal.xr.UpdateOperation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.internal.xr;
// Javase imports
// Java extension imports
// EclipseLink imports
import org.eclipse.persistence.queries.FetchGroup;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.sessions.UnitOfWork;
public class UpdateOperation extends Operation {
/**
* Execute UPDATE operation on the database
* @param xrService parent XRService
that owns this Operation
* @param invocation contains runtime argument values to be bound to the list of
* {@link Parameter}'s.
* @return result - null
as the underlying UPDATE operation on
* the database does not return a value.
*
* @see Operation
*/
@Override
public Object invoke(XRServiceAdapter xrService, Invocation invocation) {
XRDynamicEntity instance = (XRDynamicEntity)invocation.getParameters().toArray()[0];
UnitOfWork uow = xrService.getORSession().acquireUnitOfWork();
ReadObjectQuery query = new ReadObjectQuery();
query.setSelectionObject(instance);
query.setIsExecutionClone(true);
FetchGroup simpleFetchGroup = new FetchGroup();
for (String propertyName : instance.fetchPropertiesManager().getPropertyNames()) {
if (instance.isSet(propertyName)) {
simpleFetchGroup.addAttribute(propertyName);
}
}
query.setFetchGroup(simpleFetchGroup);
// read the existing object into the uow
uow.executeQuery(query);
// merge in only properties that are set
uow.mergeClone(instance);
uow.commit();
return null;
}
}