All Downloads are FREE. Search and download functionalities are using the official Maven repository.

oracle.toplink.essentials.queryframework.WriteObjectQuery Maven / Gradle / Ivy

There is a newer version: 2.1-60f
Show newest version
/*
 * The contents of this file are subject to the terms 
 * of the Common Development and Distribution License 
 * (the "License").  You may not use this file except 
 * in compliance with the License.
 * 
 * You can obtain a copy of the license at 
 * glassfish/bootstrap/legal/CDDLv1.0.txt or 
 * https://glassfish.dev.java.net/public/CDDLv1.0.html. 
 * See the License for the specific language governing 
 * permissions and limitations under the License.
 * 
 * When distributing Covered Code, include this CDDL 
 * HEADER in each file and include the License file at 
 * glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
 * add the following below this CDDL HEADER, with the 
 * fields enclosed by brackets "[]" replaced with your 
 * own identifying information: Portions Copyright [yyyy] 
 * [name of copyright owner]
 */
// Copyright (c) 1998, 2007, Oracle. All rights reserved.  
package oracle.toplink.essentials.queryframework;

import oracle.toplink.essentials.exceptions.*;
import oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl;

/**
 * 

Purpose: * Used for inserting or updating objects * WriteObjectQuery determines whether to perform a insert or an update on the database. * *

Responsibilities: *

    *
  • Determines whether to perform a insert or an update on the database. *
  • Stores object in identity map for insert if required. *
* * @author Yvon Lavoie * @since TOPLink/Java 1.0 */ public class WriteObjectQuery extends ObjectLevelModifyQuery { public WriteObjectQuery() { super(); } public WriteObjectQuery(Object objectToWrite) { this(); setObject(objectToWrite); } public WriteObjectQuery(Call call) { this(); setCall(call); } /** * INTERNAL: * Perform a does exist check to decide whether to perform an insert or update and * delegate the work to the mechanism. Does exists check will also perform an * optimistic lock check if required. * @exception DatabaseException - an error has occurred on the database * @exception OptimisticLockException - an error has occurred using the optimistic lock feature * @return object - the object being written. */ public Object executeDatabaseQuery() throws DatabaseException, OptimisticLockException { if (getObjectChangeSet() != null) { return getQueryMechanism().executeWriteWithChangeSet(); } else { return getQueryMechanism().executeWrite(); } } /** * INTERNAL: * Perform a does exist check to decide whether to perform an insert or update and * delegate the work to the mechanism. */ public void executeCommit() throws DatabaseException, OptimisticLockException { boolean doesExist; if (getSession().isUnitOfWork()) { doesExist = !((UnitOfWorkImpl)getSession()).isCloneNewObject(getObject()); if (doesExist) { doesExist = ((UnitOfWorkImpl)getSession()).isObjectRegistered(getObject()); } } else { //Initialize does exist query DoesExistQuery existQuery = (DoesExistQuery)getDescriptor().getQueryManager().getDoesExistQuery().clone(); existQuery.setObject(getObject()); existQuery.setPrimaryKey(getPrimaryKey()); existQuery.setDescriptor(getDescriptor()); existQuery.setTranslationRow(getTranslationRow()); doesExist = ((Boolean)getSession().executeQuery(existQuery)).booleanValue(); } // Do insert of update if (doesExist) { // Must do an update getQueryMechanism().updateObjectForWrite(); } else { // Must do an insert getQueryMechanism().insertObjectForWrite(); } } /** * INTERNAL: * Perform a does exist check to decide whether to perform an insert or update and * delegate the work to the mechanism. */ public void executeCommitWithChangeSet() throws DatabaseException, OptimisticLockException { // Do insert of update if (!getObjectChangeSet().isNew()) { // Must do an update if (!getSession().getCommitManager().isCommitInPreModify(objectChangeSet)) { //If the changeSet is in the PreModify then it is in the process of being written getQueryMechanism().updateObjectForWriteWithChangeSet(); } } else { // check whether the object is already being committed - // if it is and it is new, then a shallow insert must be done if (getSession().getCommitManager().isCommitInPreModify(objectChangeSet)) { // a shallow insert must be performed this.dontCascadeParts(); getQueryMechanism().insertObjectForWriteWithChangeSet(); getSession().getCommitManager().markShallowCommit(object); } else { // Must do an insert getQueryMechanism().insertObjectForWriteWithChangeSet(); } } } /** * PUBLIC: * Return if this is a write object query. */ public boolean isWriteObjectQuery() { return true; } /** * INTERNAL: * Prepare the receiver for execution in a session. */ public void prepareForExecution() throws QueryException { super.prepareForExecution(); // Set the tranlation row, it may already be set in the custom query situation. if ((getTranslationRow() == null) || (getTranslationRow().isEmpty())) { setTranslationRow(getDescriptor().getObjectBuilder().buildRowForTranslation(getObject(), getSession())); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy