/** INTERNAL: Answers the session to be used for the given query. */ protected AbstractSession getSessionForQuery(DatabaseQuery query) { if (query.hasSessionName()) { return getSessionForName(query.getSessionName()); } Class queryClass; if (query.getDescriptor() != null) { queryClass = query.getDescriptor().getJavaClass(); } else { queryClass = query.getReferenceClass(); if (queryClass == null) { throw QueryException.unnamedQueryOnSessionBroker(query); } } return getSessionForClass(queryClass); }
/** INTERNAL: Prepare the receiver for execution in a session. */ protected void prepare() throws QueryException { if (getObject() != null) { // Prepare can be called without the object set yet. checkDescriptor(getObject(), getSession()); setObject(getDescriptor().getObjectBuilder().unwrapObject(getObject(), getSession())); } super.prepare(); // It will only get to prepare if check database if required. getQueryMechanism().prepareDoesExist(getDoesExistField()); }
/** * INTERNAL: Prepare the query from the prepared query. This allows a dynamic query to prepare * itself directly from a prepared query instance. This is used in the JPQL parse cache to allow * preparsed queries to be used to prepare dynamic queries. This only copies over properties that * are configured through JPQL. */ public void prepareFromQuery(DatabaseQuery query) { super.prepareFromQuery(query); if (query.isReadAllQuery()) { ReadAllQuery readQuery = (ReadAllQuery) query; this.containerPolicy = readQuery.containerPolicy; if (readQuery.hasHierarchicalExpressions()) { this.orderSiblingsByExpressions = readQuery.getOrderSiblingsByExpressions(); this.connectByExpression = readQuery.getConnectByExpression(); this.startWithExpression = readQuery.getStartWithExpression(); } if (readQuery.hasBatchReadAttributes()) { this.batchReadAttributeExpressions = readQuery.batchReadAttributeExpressions; this.batchReadMappingQueries = readQuery.batchReadMappingQueries; this.batchReadAttributes = readQuery.batchReadAttributes; } } }
/** INTERNAL: Prepare the receiver for execution in a session. */ public void prepareForExecution() throws QueryException { super.prepareForExecution(); if (getObject() == null) { throw QueryException.objectToModifyNotSpecified(this); } setObject(this.descriptor.getObjectBuilder().unwrapObject(getObject(), getSession())); if (this.descriptor == null) { setDescriptor(getSession().getDescriptor(getObject().getClass())); } if (getPrimaryKey() == null) { setPrimaryKey( this.descriptor .getObjectBuilder() .extractPrimaryKeyFromObject(getObject(), getSession())); } if ((getTranslationRow() == null) || (getTranslationRow().isEmpty())) { setTranslationRow( this.descriptor.getObjectBuilder().buildRowForTranslation(getObject(), getSession())); } }