private JavaTypeMapping addOrderMapping(AbstractMemberMetaData fmd, JavaTypeMapping orderMapping) { boolean needsOrderMapping = false; OrderMetaData omd = fmd.getOrderMetaData(); if (fmd.hasArray()) { // Array field always has the index mapping needsOrderMapping = true; } else if (List.class.isAssignableFrom(fmd.getType())) { // List field needsOrderMapping = !(omd != null && !omd.isIndexedList()); } else if (java.util.Collection.class.isAssignableFrom(fmd.getType()) && omd != null && omd.isIndexedList() && omd.getMappedBy() == null) { // Collection field with <order> and is indexed list so needs order mapping needsOrderMapping = true; } if (needsOrderMapping) { // if the field is list or array type, add index column if (orderMapping == null) { // Create new order mapping since we need one and we aren't using a shared FK orderMapping = addOrderColumn(fmd); } if (!MetaDataUtils.readRelatedKeysFromParent(storeMgr, fmd)) { getExternalOrderMappings().put(fmd, orderMapping); } } return orderMapping; }
/** * Convenience method for whether a PK is required for the join table. * Extends JoinTable allowing for "ordered List" case which do not require a primary key (so we can have duplicates). * @return Whether a PK is required */ protected boolean requiresPrimaryKey() { if (elementMapping != null && elementMapping instanceof ReferenceMapping && elementMapping.getNumberOfDatastoreMappings() > 1) { // Cannot apply PK when we have multiple interface implementations return false; } if (Set.class.isAssignableFrom(mmd.getType())) { // No dups } else if (mmd.getOrderMetaData() != null && !mmd.getOrderMetaData().isIndexedList()) { // Dups allowed in a List, but if we have an indexed list then we can have a PK return false; } return super.requiresPrimaryKey(); } }
BackingStoreHelper.appendWhereClauseForMapping(stmt, ownerMapping, null, true); if (getOwnerMemberMetaData().getOrderMetaData() == null || getOwnerMemberMetaData().getOrderMetaData().isIndexedList())
if (omd != null && !omd.isIndexedList()) else if (java.util.Collection.class.isAssignableFrom(fmd.getType()) && omd != null && omd.isIndexedList())
public FKListStore(AbstractMemberMetaData ownerMmd, DatastoreManager storeMgr, ClassLoaderResolver clr) { super(ownerMmd, storeMgr, clr); orderMapping = elementTable.getExternalMapping(ownerMemberMetaData, MappingConsumer.MAPPING_TYPE_EXTERNAL_INDEX); if (ownerMemberMetaData.getOrderMetaData() != null && !ownerMemberMetaData.getOrderMetaData().isIndexedList()) { indexedList = false; } if (!storeMgr.storageVersionAtLeast(StorageVersion.READ_OWNED_CHILD_KEYS_FROM_PARENTS) && orderMapping == null && indexedList) { // Early storage version requires that indexedList has an order mapping in the element throw new NucleusUserException(LOCALISER.msg("056041", ownerMemberMetaData.getAbstractClassMetaData().getFullClassName(), ownerMemberMetaData.getName(), elementType)); } }
else if (mmd.getOrderMetaData() != null && !mmd.getOrderMetaData().isIndexedList())
else if (!mmd.getOrderMetaData().isIndexedList())
else if (!mmd.getOrderMetaData().isIndexedList())
jdbcPosition = BackingStoreHelper.populateElementInStatement(ec, ps, element, jdbcPosition, elementMapping); jdbcPosition = BackingStoreHelper.populateOwnerInStatement(op, ec, ps, jdbcPosition, this); if (getOwnerMemberMetaData().getOrderMetaData() != null && !getOwnerMemberMetaData().getOrderMetaData().isIndexedList())
if (mmd.getOrderMetaData() != null && !mmd.getOrderMetaData().isIndexedList()) { indexedList = false;
if (mmd.getOrderMetaData() != null && !mmd.getOrderMetaData().isIndexedList())
this.containerTable = joinTable; setOwner(mmd); if (ownerMemberMetaData.getOrderMetaData() != null && !ownerMemberMetaData.getOrderMetaData().isIndexedList())
if (mmd.getOrderMetaData() != null) if (mmd.getOrderMetaData().isIndexedList())