/** * INTERNAL Return true if it uses a cast class and query is downcasting. It will look into * inheritance hierarchy of the root descriptor. */ public boolean isDowncast(ClassDescriptor rootDescriptor, AbstractSession session) { if (castClass == null) { return false; } if (rootDescriptor.getJavaClass() == castClass) { return false; } ClassDescriptor castDescriptor = session.getClassDescriptor(castClass); if (castDescriptor == null) { throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); } if (castDescriptor.getInheritancePolicy() == null) { throw QueryException.castMustUseInheritance(getBaseExpression()); } ClassDescriptor parentDescriptor = castDescriptor.getInheritancePolicy().getParentDescriptor(); while (parentDescriptor != null) { if (parentDescriptor == rootDescriptor) { return true; } parentDescriptor = parentDescriptor.getInheritancePolicy().getParentDescriptor(); } throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); }
/** * INTERNAL Return the descriptor which contains this query key, look in the inheritance hierarchy * of rootDescriptor for the descriptor. */ public ClassDescriptor convertToCastDescriptor( ClassDescriptor rootDescriptor, AbstractSession session) { if (castClass == null || rootDescriptor == null || rootDescriptor.getJavaClass() == castClass) { return rootDescriptor; } ClassDescriptor castDescriptor = session.getClassDescriptor(castClass); if (castDescriptor == null) { throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); } if (!castDescriptor.hasInheritance()) { throw QueryException.castMustUseInheritance(getBaseExpression()); } ClassDescriptor parentDescriptor = castDescriptor.getInheritancePolicy().getParentDescriptor(); while (parentDescriptor != null) { if (parentDescriptor == rootDescriptor) { return castDescriptor; } parentDescriptor = parentDescriptor.getInheritancePolicy().getParentDescriptor(); } ClassDescriptor childDescriptor = rootDescriptor; while (childDescriptor != null) { if (childDescriptor == castDescriptor) { return rootDescriptor; } childDescriptor = childDescriptor.getInheritancePolicy().getParentDescriptor(); } throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); }
/** * INTERNAL - Return the descriptor which contains this query key, look in the inheritance * hierarchy of rootDescriptor for the descriptor. Does not set the descriptor, only returns it. */ public ClassDescriptor convertToCastDescriptor( ClassDescriptor rootDescriptor, AbstractSession session) { isDowncast = Boolean.FALSE; if (castClass == null || rootDescriptor == null || rootDescriptor.getJavaClass() == castClass) { return rootDescriptor; } ClassDescriptor castDescriptor = session.getClassDescriptor(castClass); if (castDescriptor == null) { throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); } if (!castDescriptor.hasInheritance()) { throw QueryException.castMustUseInheritance(getBaseExpression()); } ClassDescriptor parentDescriptor = castDescriptor.getInheritancePolicy().getParentDescriptor(); while (parentDescriptor != null) { if (parentDescriptor == rootDescriptor) { isDowncast = Boolean.TRUE; return castDescriptor; } parentDescriptor = parentDescriptor.getInheritancePolicy().getParentDescriptor(); } // is there value casting an emp to person in a query? ClassDescriptor childDescriptor = rootDescriptor; while (childDescriptor != null) { if (childDescriptor == castDescriptor) { return rootDescriptor; } childDescriptor = childDescriptor.getInheritancePolicy().getParentDescriptor(); } throw QueryException.couldNotFindCastDescriptor(castClass, getBaseExpression()); }
/** INTERNAL: */ @Override public List<DatabaseField> getSelectionFields(ReadQuery query) { if (getDescriptor() == null) { DatabaseMapping mapping = getMapping(); if (mapping != null) { return mapping.getSelectFields(); } return new ArrayList<DatabaseField>(0); } if (descriptor.hasInheritance() && descriptor.getInheritancePolicy().shouldReadSubclasses() && (!descriptor.getInheritancePolicy().hasMultipleTableChild()) || shouldUseOuterJoinForMultitableInheritance()) { // return all fields because we can. if (query != null && query.isObjectLevelReadQuery()) { return descriptor.getAllSelectionFields((ObjectLevelReadQuery) query); } else { return descriptor.getAllSelectionFields(); } } else { if (query != null && query.isObjectLevelReadQuery()) { return descriptor.getSelectionFields((ObjectLevelReadQuery) query); } else { return descriptor.getSelectionFields(); } } }
/** * INTERNAL: this returns a single expression to represent the join from the main table to all * child descriptor tables Only if outer joins should be printed in the where clause * * @return Expression */ public Expression getTreatCriteria() { if (getDescriptor() == null) { return null; } // need to build this using just the multiple tables on this descriptor not included in the // parent's join expression Expression criteria = null; if (getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { Vector tables = getDescriptor().getTables(); // This child's tables ClassDescriptor parentDescriptor = this.typeExpressionBase.getDescriptor(); int tablesSize = tables.size(); if (parentDescriptor.hasInheritance() && parentDescriptor.getInheritancePolicy().hasMultipleTableChild()) { // look up the joins from the parent descriptor to our tables. for (int i = 0; i < tablesSize; i++) { DatabaseTable table = (DatabaseTable) tables.elementAt(i); Expression joinExpression = parentDescriptor.getInheritancePolicy().getChildrenTablesJoinExpressions().get(table); // Some of our tables might be the in our parent as well, so ignore the lack of a // joinExpression if (joinExpression != null) { joinExpression = this.baseExpression.twist(joinExpression, this); if (shouldUseOuterJoin()) { joinExpression = joinExpression.convertToUseOuterJoin(); } criteria = joinExpression.and(criteria); } } } } return criteria; }
/** Return any tables that are defined by this expression (and not its base). */ @Override public List<DatabaseTable> getOwnedTables() { ClassDescriptor descriptor = getDescriptor(); List<DatabaseTable> tables = null; if (descriptor == null) { List additionalTables = getAdditionalTables(); if (additionalTables == null) { return null; } else { return new ArrayList(additionalTables); } } else if (descriptor.isAggregateDescriptor()) { return null; } else if ((descriptor.getHistoryPolicy() != null) && (getAsOfClause() != null && getAsOfClause().getValue() != null)) { tables = descriptor.getHistoryPolicy().getHistoricalTables(); } else if (isUsingOuterJoinForMultitableInheritance()) { tables = descriptor.getInheritancePolicy().getAllTables(); } else { tables = descriptor.getTables(); } List additionalTables = getAdditionalTables(); if (additionalTables != null) { tables = new Vector(tables); Helper.addAllUniqueToList(tables, additionalTables); return tables; } return tables; }
protected static void afterAddDescriptors(Session session, TestSystem aTestSystem) { if (aTestSystem instanceof InheritanceSystem) { // For using read all subclasses views. org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform = session.getLogin().getPlatform(); if (platform.isOracle() || platform.isSybase() || platform.isSQLAnywhere()) { ClassDescriptor computerDescriptor = session.getClassDescriptor(Computer.class); ClassDescriptor vehicleDescriptor = session.getClassDescriptor(Vehicle.class); if (computerDescriptor.getInheritancePolicy().requiresMultipleTableSubclassRead()) { computerDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllComputers"); } if (vehicleDescriptor.getInheritancePolicy().requiresMultipleTableSubclassRead()) { vehicleDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllVehicles"); } } } }
/** * Return whether the reference objects must be deleted one by one, as opposed to with a single * DELETE statement. */ protected boolean mustDeleteReferenceObjectsOneByOne() { ClassDescriptor referenceDescriptor = this.getReferenceDescriptor(); return referenceDescriptor.hasDependencyOnParts() || referenceDescriptor.usesOptimisticLocking() || (referenceDescriptor.hasInheritance() && referenceDescriptor.getInheritancePolicy().shouldReadSubclasses()) || referenceDescriptor.hasMultipleTables(); }
protected void initializeWithTableNames(Session session, Collection tableNames) { tableNameToClass = new Hashtable(tableNames.size()); tableNameToPkFieldNames = new Hashtable(tableNames.size()); // pkFieldVectors cached here to avoid calculating it more than once per class Hashtable classToPkFieldNames = new Hashtable(); // loop through the descriptors to fill out tableNameToClass and tableNameToPkFieldNames Iterator descriptors = session.getDescriptors().values().iterator(); while (descriptors.hasNext() && !tableNames.isEmpty()) { ClassDescriptor desc = (ClassDescriptor) descriptors.next(); // Create a Vector containing names of all tables mapped to the descriptor Vector descTableNames = desc.getTableNames(); // bypass descriptors with no tables if (descTableNames.isEmpty()) { continue; } // Remove schema names (if any) converting "SCHEMA_NAME.TABLE_NAME" to "TABLE_NAME" removePrefixFromDatabaseObjectNames(descTableNames); // handle inheritance: table name should be mapped to the base mapped class Class baseClass = desc.getJavaClass(); while (desc.isChildDescriptor()) { desc = session.getDescriptor(desc.getInheritancePolicy().getParentClass()); baseClass = desc.getJavaClass(); } Iterator it = tableNames.iterator(); while (it.hasNext()) { // for each tableName specified by the user String tableName = (String) it.next(); // verify whether the descriptor maps a table with the same name if (descTableNames.contains(tableName)) { // map the table name to the baseClass corresponding to the descriptor tableNameToClass.put(tableName, baseClass); // try to obtain cached pkFieldNames Vector corresponding to baseClass Vector pkFieldNames = (Vector) classToPkFieldNames.get(baseClass); if (pkFieldNames == null) { // Create a Vector containing names of all primary key fields pkFieldNames = desc.getPrimaryKeyFieldNames(); // Remove table name converting from "TABLE_NAME.FIELD_NAME" to "FIELD_NAME" removePrefixFromDatabaseObjectNames(pkFieldNames); // cache pkFieldNames Vector corresponding to baseClass classToPkFieldNames.put(baseClass, pkFieldNames); } // map the table name to the Vector of names of primary key fields. tableNameToPkFieldNames.put(tableName, pkFieldNames); // the table name is mapped - remove it from the list of table names to be mapped. it.remove(); } } } }
/** * INTERNAL: Not to be confused with the public getField(String) This returns a collection of all * fields associated with this object. Really only applies to query keys representing an object or * to expression builders. */ @Override public Vector getFields() { if (getDescriptor() == null) { DatabaseMapping mapping = getMapping(); if (mapping != null) { return mapping.getSelectFields(); } return new NonSynchronizedVector(0); } if (descriptor.hasInheritance() && descriptor.getInheritancePolicy().shouldReadSubclasses() && (!descriptor.getInheritancePolicy().hasMultipleTableChild()) || shouldUseOuterJoinForMultitableInheritance()) { // return all fields because we can. return descriptor.getAllFields(); } else { return descriptor.getFields(); } }
/** * INTERNAL: Used in case outer joins should be printed in FROM clause. Each of the additional * tables mapped to expressions that joins it. */ public Map additionalTreatExpressionCriteriaMap() { if (getDescriptor() == null) { return null; } int tableSize = 0; HashMap tablesJoinExpressions = new HashMap(); ClassDescriptor parentDescriptor = this.typeExpressionBase.getDescriptor(); // outerjoin our parent->child tables if (parentDescriptor.hasInheritance() && parentDescriptor.getInheritancePolicy().hasMultipleTableChild()) { Vector tables = getDescriptor().getTables(); // All this child's tables tableSize = tables.size(); // look up the joins from the parent descriptor to our tables. for (int i = 0; i < tableSize; i++) { DatabaseTable table = (DatabaseTable) tables.elementAt(i); Expression joinExpression = parentDescriptor.getInheritancePolicy().getChildrenTablesJoinExpressions().get(table); // Some of our tables might be the in our parent as well, so ignore the lack of a // joinExpression if (joinExpression != null) { joinExpression = this.baseExpression.twist(joinExpression, this); tablesJoinExpressions.put(table, joinExpression); } } } if (isUsingOuterJoinForMultitableInheritance()) { List childrenTables = getDescriptor().getInheritancePolicy().getChildrenTables(); tableSize = childrenTables.size(); for (int i = 0; i < tableSize; i++) { DatabaseTable table = (DatabaseTable) childrenTables.get(i); Expression joinExpression = getDescriptor().getInheritancePolicy().getChildrenTablesJoinExpressions().get(table); joinExpression = this.baseExpression.twist(joinExpression, this); tablesJoinExpressions.put(table, joinExpression); } } return tablesJoinExpressions; }
protected void setup() { getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); descriptorToModify = project .getDescriptors() .get(org.eclipse.persistence.testing.models.employee.domain.Project.class); descriptorToModify .getInheritancePolicy() .setReadAllSubclassesViewName("Testing getReadAllSubclassesView ()"); }
public static Hashtable buildInheritanceHierarchyTree(Project project) { Map descriptors = project.getDescriptors(); Hashtable hierarchyTree = new Hashtable(descriptors.size()); for (Iterator descriptorIterator = descriptors.values().iterator(); descriptorIterator.hasNext(); ) { ClassDescriptor descriptor = (ClassDescriptor) descriptorIterator.next(); String className = descriptor.getJavaClassName(); if (className == null) { className = descriptor.getJavaClass().getName(); } HierarchyNode node = getNodeForClass(className, hierarchyTree); if (descriptor.hasInheritance() && (descriptor.getInheritancePolicy().getParentClassName() != null)) { HierarchyNode parentNode = getNodeForClass(descriptor.getInheritancePolicy().getParentClassName(), hierarchyTree); node.setParent(parentNode); } } return hierarchyTree; }
public void addDescriptors(DatabaseSession session) { // Oracle has bug in outjoins that require outerjoin of inheritance type. // This should really be handled by the platform during expression normalization... // Id for Entomologist can be negative (millis cast to int wraps...) project.getDescriptor(Entomologist.class).setIdValidation(IdValidation.NONE); session.addDescriptors(project); // For using read all subclasses views. DatabasePlatform platform = session.getLogin().getPlatform(); if (platform.isOracle() || platform.isSybase()) { ClassDescriptor computerDescriptor = session.getDescriptor(Computer.class); ClassDescriptor vehicleDescriptor = session.getDescriptor(Vehicle.class); computerDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllComputers"); vehicleDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllVehicles"); } // Enable outer-join on AnimalMatt hierarchy. session .getDescriptor(Animal_Matt.class) .getInheritancePolicy() .setShouldOuterJoinSubclasses(true); }
/** * INTERNAL: much like getOwnedTables(), this gets the tables represented from the descriptor. * Difference is this only returns local tables for the child casted descriptor, and excludes * tables owned by the parent descriptor */ public List<DatabaseTable> getOwnedSubTables() { ClassDescriptor parentDescriptor = this.typeExpressionBase.getDescriptor(); Vector<DatabaseTable> childTables = new Vector(2); if (parentDescriptor.hasInheritance() && parentDescriptor.getInheritancePolicy().hasMultipleTableChild()) { List parentTables = typeExpressionBase.getOwnedTables(); // All tables for this child, including parent tables Vector<DatabaseTable> tables = getDescriptor().getTables(); for (DatabaseTable table : tables) { if (!parentTables.contains(table)) { childTables.add(table); } } } return childTables; }
protected Object readObjectFromRow(Session session, ClassDescriptor desc, Record row) { if (desc.hasInheritance()) { Class newClass = desc.getInheritancePolicy().classFromRow((DatabaseRecord) row, (AbstractSession) session); desc = session.getClassDescriptor(newClass); } Object object = desc.getObjectBuilder().buildNewInstance(); ReadObjectQuery query = new ReadObjectQuery(); query.setSession((AbstractSession) session); for (Enumeration mappings = desc.getMappings().elements(); mappings.hasMoreElements(); ) { DatabaseMapping mapping = (DatabaseMapping) mappings.nextElement(); mapping.readFromRowIntoObject( (DatabaseRecord) row, query.getJoinedAttributeManager(), object, null, query, query.getSession(), true); } return object; }
public void customize(ClassDescriptor descriptor) { descriptor.getInheritancePolicy().setShouldOuterJoinSubclasses(true); }
/** * INTERNAL: Build and return the nested rows from the specified field value. This method allows * the field value to be an ARRAY containing other structures such as arrays or Struct, or direct * values. */ public static Object buildContainerFromArray( Array fieldValue, ObjectRelationalDatabaseField arrayField, AbstractSession session) throws DatabaseException { if (arrayField.getType() == null) { return fieldValue; } Object[] objects = null; try { objects = (Object[]) fieldValue.getArray(); } catch (java.sql.SQLException ex) { throw DatabaseException.sqlException(ex, session, false); } if (objects == null) { return null; } boolean isNestedStructure = false; ObjectRelationalDataTypeDescriptor ord = null; DatabaseField nestedType = null; if (arrayField != null) { nestedType = arrayField.getNestedTypeField(); if ((nestedType != null) && nestedType.getSqlType() == Types.STRUCT) { ClassDescriptor descriptor = session.getDescriptor(nestedType.getType()); if ((descriptor != null) && (descriptor.isObjectRelationalDataTypeDescriptor())) { // this is used to convert non-null objects passed through stored procedures and custom // SQL to structs ord = (ObjectRelationalDataTypeDescriptor) descriptor; } } else if ((nestedType != null) && (nestedType instanceof ObjectRelationalDatabaseField)) { isNestedStructure = true; } } // handle ARRAY conversions ReadObjectQuery query = new ReadObjectQuery(); query.setSession(session); ContainerPolicy cp = ContainerPolicy.buildPolicyFor(arrayField.getType()); Object container = cp.containerInstance(objects.length); for (int i = 0; i < objects.length; i++) { Object arrayValue = objects[i]; if (arrayValue == null) { return null; } if (ord != null) { AbstractRecord nestedRow = ord.buildRowFromStructure((Struct) arrayValue); ClassDescriptor descriptor = ord; if (descriptor.hasInheritance()) { Class newElementClass = descriptor.getInheritancePolicy().classFromRow(nestedRow, session); if (!descriptor.getJavaClass().equals(newElementClass)) { descriptor = session.getDescriptor(newElementClass); if (descriptor == null) { descriptor = ord; } } } arrayValue = descriptor.getObjectBuilder().buildNewInstance(); descriptor .getObjectBuilder() .buildAttributesIntoObject(arrayValue, nestedRow, query, null, false); } else if (isNestedStructure && (arrayValue instanceof Array)) { arrayValue = buildContainerFromArray( (Array) arrayValue, (ObjectRelationalDatabaseField) nestedType, session); } cp.addInto(arrayValue, container, session); } return container; }
public Object buildObjectFromNestedRow( AbstractRecord nestedRow, JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, AbstractSession executionSession, boolean isTargetProtected) { Object objectToAdd = null; ClassDescriptor aDescriptor = getReferenceDescriptor((DOMRecord) nestedRow); if (aDescriptor == null) { if ((getKeepAsElementPolicy() == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (getKeepAsElementPolicy() == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) { XMLPlatformFactory.getInstance() .getXMLPlatform() .namespaceQualifyFragment((Element) ((DOMRecord) nestedRow).getDOM()); objectToAdd = ((DOMRecord) nestedRow).getDOM(); convertDataValueToObjectValue( objectToAdd, executionSession, ((XMLRecord) nestedRow).getUnmarshaller()); // simple case objectToAdd = convertToSimpleTypeIfPresent(objectToAdd, nestedRow, executionSession); } else { NodeList children = ((Element) ((DOMRecord) nestedRow).getDOM()).getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node nextNode = children.item(i); if (nextNode.getNodeType() == nextNode.ELEMENT_NODE) { // complex child String type = ((Element) ((DOMRecord) nestedRow).getDOM()) .getAttributeNS( javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, XMLConstants.SCHEMA_TYPE_ATTRIBUTE); if (type != null && type.length() > 0) { throw XMLMarshalException.unknownXsiTypeValue(type, (Mapping) this); } else { throw XMLMarshalException.noDescriptorFound((Mapping) this); } } } // simple case objectToAdd = convertToSimpleTypeIfPresent(objectToAdd, nestedRow, executionSession); } } else { if (aDescriptor.hasInheritance()) { Class newElementClass = aDescriptor.getInheritancePolicy().classFromRow(nestedRow, executionSession); if (newElementClass == null) { // no xsi:type attribute - look for type indicator on the field QName leafElementType = ((XMLField) getField()).getLeafElementType(); if (leafElementType != null) { XPathQName leafElementXPathQName = new XPathQName(leafElementType, ((XMLRecord) nestedRow).isNamespaceAware()); Object indicator = aDescriptor .getInheritancePolicy() .getClassIndicatorMapping() .get(leafElementXPathQName); if (indicator != null) { newElementClass = (Class) indicator; } } } if (newElementClass != null) { aDescriptor = this.getReferenceDescriptor(newElementClass, executionSession); } else { // since there is no xsi:type attribute or leaf element type set, // use the reference descriptor - make sure it is non-abstract if (Modifier.isAbstract(aDescriptor.getJavaClass().getModifiers())) { // throw an exception throw DescriptorException.missingClassIndicatorField( nestedRow, aDescriptor.getInheritancePolicy().getDescriptor()); } } } // Object element objectToAdd = buildCompositeObject( aDescriptor, nestedRow, sourceQuery, null, joinManager, executionSession); objectToAdd = convertDataValueToObjectValue( objectToAdd, executionSession, ((XMLRecord) nestedRow).getUnmarshaller()); } return objectToAdd; }
protected void onConnectAllSequences() { connectedSequences = new Vector(); boolean shouldUseTransaction = false; boolean shouldUsePreallocation = false; boolean shouldAcquireValueAfterInsert = false; Iterator descriptors = getOwnerSession().getDescriptors().values().iterator(); while (descriptors.hasNext()) { ClassDescriptor descriptor = (ClassDescriptor) descriptors.next(); // Find root sequence, because inheritance needs to be resolved here. // TODO: The way we initialize sequencing needs to be in line with descriptor init. ClassDescriptor parentDescriptor = descriptor; while (!parentDescriptor.usesSequenceNumbers() && parentDescriptor.isChildDescriptor()) { ClassDescriptor newDescriptor = getOwnerSession() .getDescriptor(parentDescriptor.getInheritancePolicy().getParentClass()); // Avoid issue with error cases of self parent, or null parent. if ((newDescriptor == null) || (newDescriptor == parentDescriptor)) { break; } parentDescriptor = newDescriptor; } if (!parentDescriptor.usesSequenceNumbers()) { continue; } String seqName = parentDescriptor.getSequenceNumberName(); Sequence sequence = getSequence(seqName); if (sequence == null) { sequence = new DefaultSequence(seqName); getOwnerSession().getDatasourcePlatform().addSequence(sequence); } // PERF: Initialize the sequence, this avoid having to look it up every time. descriptor.setSequence(sequence); if (connectedSequences.contains(sequence)) { continue; } try { if (sequence instanceof DefaultSequence && !connectedSequences.contains(getDefaultSequence())) { getDefaultSequence().onConnect(getOwnerSession().getDatasourcePlatform()); connectedSequences.add(0, getDefaultSequence()); shouldUseTransaction |= getDefaultSequence().shouldUseTransaction(); shouldUsePreallocation |= getDefaultSequence().shouldUsePreallocation(); shouldAcquireValueAfterInsert |= getDefaultSequence().shouldAcquireValueAfterInsert(); } sequence.onConnect(getOwnerSession().getDatasourcePlatform()); connectedSequences.addElement(sequence); shouldUseTransaction |= sequence.shouldUseTransaction(); shouldUsePreallocation |= sequence.shouldUsePreallocation(); shouldAcquireValueAfterInsert |= sequence.shouldAcquireValueAfterInsert(); } catch (RuntimeException ex) { // defaultSequence has to disconnect the last for (int i = connectedSequences.size() - 1; i >= 0; i--) { try { Sequence sequenceToDisconnect = (Sequence) connectedSequences.elementAt(i); sequenceToDisconnect.onDisconnect(getOwnerSession().getDatasourcePlatform()); } catch (RuntimeException ex2) { // ignore } } connectedSequences = null; throw ex; } } if (shouldAcquireValueAfterInsert && !shouldUsePreallocation) { whenShouldAcquireValueForAll = AFTER_INSERT; } else if (!shouldAcquireValueAfterInsert && shouldUsePreallocation) { whenShouldAcquireValueForAll = BEFORE_INSERT; } atLeastOneSequenceShouldUseTransaction = shouldUseTransaction; atLeastOneSequenceShouldUsePreallocation = shouldUsePreallocation; }