@Override public boolean isForeignJoinColumn(EntityType<?> ownerType, String attributeName) { ManagedTypeImpl<?> managedType = (ManagedTypeImpl<?>) ownerType; String[] parts = attributeName.split("\\."); AbstractMemberMetaData metaData = managedType.getMetadata().getMetaDataForMember(parts[0]); for (int i = 1; i < parts.length; i++) { EmbeddedMetaData embeddedMetaData = metaData.getEmbeddedMetaData(); if (embeddedMetaData == null) { // Probably trying to access the id attribute of a ToMany relation return metaData.getJoinMetaData() != null; } else { AbstractMemberMetaData[] metaDatas = embeddedMetaData.getMemberMetaData(); metaData = null; for (int j = 0; j < metaDatas.length; j++) { if (parts[i].equals(metaDatas[j].getName())) { metaData = metaDatas[j]; break; } } if (metaData == null) { throw new IllegalArgumentException("Could not find property '" + parts[i] + "' in embeddable type: " + ((AbstractMemberMetaData) embeddedMetaData.getParent()).getType().getName()); } } } return metaData.getJoinMetaData() != null; }
@Override public boolean isForeignJoinColumn(EntityType<?> ownerType, String attributeName) { ManagedTypeImpl<?> managedType = (ManagedTypeImpl<?>) ownerType; String[] parts = attributeName.split("\\."); AbstractMemberMetaData metaData = managedType.getMetadata().getMetaDataForMember(parts[0]); for (int i = 1; i < parts.length; i++) { EmbeddedMetaData embeddedMetaData = metaData.getEmbeddedMetaData(); if (embeddedMetaData == null) { // Probably trying to access the id attribute of a ToMany relation return metaData.getJoinMetaData() != null; } else { AbstractMemberMetaData[] metaDatas = embeddedMetaData.getMemberMetaData(); metaData = null; for (int j = 0; j < metaDatas.length; j++) { if (parts[i].equals(metaDatas[j].getName())) { metaData = metaDatas[j]; break; } } if (metaData == null) { throw new IllegalArgumentException("Could not find property '" + parts[i] + "' in embeddable type: " + ((AbstractMemberMetaData) embeddedMetaData.getParent()).getType().getName()); } } } return metaData.getJoinMetaData() != null; }
@Override public boolean isForeignJoinColumn(EntityType<?> ownerType, String attributeName) { ManagedTypeImpl<?> managedType = (ManagedTypeImpl<?>) ownerType; String[] parts = attributeName.split("\\."); AbstractMemberMetaData metaData = managedType.getMetadata().getMetaDataForMember(parts[0]); for (int i = 1; i < parts.length; i++) { EmbeddedMetaData embeddedMetaData = metaData.getEmbeddedMetaData(); if (embeddedMetaData == null) { // Probably trying to access the id attribute of a ToMany relation return metaData.getJoinMetaData() != null; } else { AbstractMemberMetaData[] metaDatas = embeddedMetaData.getMemberMetaData(); metaData = null; for (int j = 0; j < metaDatas.length; j++) { if (parts[i].equals(metaDatas[j].getName())) { metaData = metaDatas[j]; break; } } if (metaData == null) { throw new IllegalArgumentException("Could not find property '" + parts[i] + "' in embeddable type: " + ((AbstractMemberMetaData) embeddedMetaData.getParent()).getType().getName()); } } } return metaData.getJoinMetaData() != null; }
private AbstractMemberMetaData getMemberMetaDataForTuples(AbstractClassMetaData acmd, List<String> tuples) { AbstractMemberMetaData ammd = acmd.getMetaDataForMember(tuples.get(0)); if (ammd == null || tuples.size() == 1) { return ammd; } // more than one tuple, so it must be embedded data String parentFullClassName = acmd.getFullClassName(); for (String tuple : tuples.subList(1, tuples.size())) { EmbeddedMetaData emd = ammd.getEmbeddedMetaData(); if (emd == null) { throw new NucleusFatalUserException( query.getSingleStringQuery() + ": Can only reference properties of a sub-object if " + "the sub-object is embedded."); } DatastoreTable parentTable = getStoreManager().getDatastoreClass(parentFullClassName, getClassLoaderResolver()); parentFullClassName = ammd.getTypeName(); AbstractMemberMetaData parentField = (AbstractMemberMetaData) emd.getParent(); EmbeddedMapping embeddedMapping = (EmbeddedMapping) parentTable.getMappingForFullFieldName(parentField.getFullFieldName()); ammd = findMemberMetaDataWithName(tuple, embeddedMapping); if (ammd == null) { break; } } return ammd; }