/** * Retrieves the defined entity-names for any subclasses defined for this * entity. * * @return Any subclass entity-names. */ protected Set getSubclassEntityNames() { return entityMetamodel.getSubclassEntityNames(); }
public boolean isSubclassEntityName(String entityName) { return entityMetamodel.getSubclassEntityNames().contains( entityName ); }
public String getDiscriminatorColumnReaderTemplate() { if ( getEntityMetamodel().getSubclassEntityNames().size() == 1 ) { return getDiscriminatorSQLValue(); } else { return Template.TEMPLATE + "." + DISCRIMINATOR_ALIAS; } }
public String[][] getPolymorphicJoinColumns(String lhsTableAlias, String propertyPath) { Set<String> subclassEntityNames = getEntityMetamodel().getSubclassEntityNames(); // We will collect all the join columns from the LHS subtypes here List<String[]> polymorphicJoinColumns = new ArrayList<>( subclassEntityNames.size() ); String[] joinColumns; OUTER: for ( String subclassEntityName : subclassEntityNames ) { AbstractEntityPersister subclassPersister = (AbstractEntityPersister) getFactory() .getMetamodel() .entityPersister( subclassEntityName ); joinColumns = subclassPersister.toColumns( lhsTableAlias, propertyPath ); if ( joinColumns.length == 0 ) { // The subtype does not have a "concrete" mapping for the property path continue; } // Check for duplicates like this since we will mostly have just a few candidates for ( String[] existingColumns : polymorphicJoinColumns ) { if ( Arrays.deepEquals( existingColumns, joinColumns ) ) { continue OUTER; } } polymorphicJoinColumns.add( joinColumns ); } return ArrayHelper.to2DStringArray( polymorphicJoinColumns ); }
private String[] decodeTreatAsRequests(Set<String> treatAsDeclarations) { final List<String> values = new ArrayList<String>(); for ( String subclass : treatAsDeclarations ) { final Queryable queryable = (Queryable) getFactory().getEntityPersister( subclass ); if ( !queryable.isAbstract() ) { values.add( queryable.getDiscriminatorSQLValue() ); } else if ( queryable.hasSubclasses() ) { // if the treat is an abstract class, add the concrete implementations to values if any Set<String> actualSubClasses = queryable.getEntityMetamodel().getSubclassEntityNames(); for ( String actualSubClass : actualSubClasses ) { if ( actualSubClass.equals( subclass ) ) { continue; } Queryable actualQueryable = (Queryable) getFactory().getEntityPersister( actualSubClass ); if ( !actualQueryable.hasSubclasses() ) { values.add( actualQueryable.getDiscriminatorSQLValue() ); } } } } return values.toArray( new String[values.size()] ); }
final Set<String> subClassEntityNames = metamodel.getSubclassEntityNames(); if ( subClassEntityNames == null ) { return;
/** * Retrieves the defined entity-names for any subclasses defined for this * entity. * * @return Any subclass entity-names. */ protected Set getSubclassEntityNames() { return entityMetamodel.getSubclassEntityNames(); }
/** * Retrieves the defined entity-names for any subclasses defined for this * entity. * * @return Any subclass entity-names. */ protected Set getSubclassEntityNames() { return entityMetamodel.getSubclassEntityNames(); }
public boolean isSubclassEntityName(String entityName) { return entityMetamodel.getSubclassEntityNames().contains(entityName); }
public boolean isSubclassEntityName(String entityName) { return entityMetamodel.getSubclassEntityNames().contains(entityName); }
private Document createDiscriminatorFilter(OgmEntityPersister entityPersister, String discriminatorColumnName) { final Object discriminatorValue = entityPersister.getDiscriminatorValue(); Document discriminatorFilter = null; @SuppressWarnings("unchecked") Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); if ( subclassEntityNames.size() == 1 ) { discriminatorFilter = new Document( discriminatorColumnName, discriminatorValue ); } else { Set<Object> discriminatorValues = new HashSet<>(); discriminatorValues.add( discriminatorValue ); for ( String subclass : subclassEntityNames ) { OgmEntityPersister subclassPersister = (OgmEntityPersister) sessionFactory.getMetamodel().entityPersister( subclass ); Object subDiscriminatorValue = subclassPersister.getDiscriminatorValue(); discriminatorValues.add( subDiscriminatorValue ); } discriminatorFilter = new Document( discriminatorColumnName, new Document( "$in", discriminatorValues ) ); } return discriminatorFilter; }
private Document createDiscriminatorFilter(OgmEntityPersister entityPersister, String discriminatorColumnName) { final Object discriminatorValue = entityPersister.getDiscriminatorValue(); Document discriminatorFilter = null; @SuppressWarnings("unchecked") Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); if ( subclassEntityNames.size() == 1 ) { discriminatorFilter = new Document( discriminatorColumnName, discriminatorValue ); } else { Set<Object> discriminatorValues = new HashSet<>(); discriminatorValues.add( discriminatorValue ); for ( String subclass : subclassEntityNames ) { OgmEntityPersister subclassPersister = (OgmEntityPersister) sessionFactory.getMetamodel().entityPersister( subclass ); Object subDiscriminatorValue = subclassPersister.getDiscriminatorValue(); discriminatorValues.add( subDiscriminatorValue ); } discriminatorFilter = new Document( discriminatorColumnName, new Document( "$in", discriminatorValues ) ); } return discriminatorFilter; }
private static Set<String> polymorphicEntityColumns(final OgmEntityPersister persister, List<String> selectableColumnNames, final EntityDiscriminator discriminator) { Set<String> columnNames = new HashSet<>(); if ( !persister.getEntityMetamodel().getSubclassEntityNames().isEmpty() ) { @SuppressWarnings("unchecked") Set<String> subclasses = persister.getEntityMetamodel().getSubclassEntityNames(); for ( String className : subclasses ) { OgmEntityPersister subEntityPersister = (OgmEntityPersister) persister.getFactory().getMetamodel().entityPersister( className ); if ( !subEntityPersister.equals( persister ) ) { List<String> subEntityColumnNames = selectableColumnNames( subEntityPersister, null ); for ( String column : subEntityColumnNames ) { if ( !selectableColumnNames.contains( column ) ) { columnNames.add( column ); } } } } } return columnNames; }
private Document appendDiscriminatorClause(OgmEntityPersister entityPersister, Document query) { String discriminatorColumnName = entityPersister.getDiscriminatorColumnName(); if ( discriminatorColumnName != null ) { // InheritanceType.SINGLE_TABLE Document discriminatorFilter = createDiscriminatorFilter( entityPersister, discriminatorColumnName ); if ( query.keySet().isEmpty() ) { return discriminatorFilter; } else { return new Document( "$and", Arrays.asList( query, discriminatorFilter ) ); } } else if ( entityPersister.hasSubclasses() ) { // InheritanceType.TABLE_PER_CLASS @SuppressWarnings("unchecked") Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); throw log.queriesOnPolymorphicEntitiesAreNotSupportedWithTablePerClass( "MongoDB", subclassEntityNames ); } return query; }
private Document appendDiscriminatorClause(OgmEntityPersister entityPersister, Document query) { String discriminatorColumnName = entityPersister.getDiscriminatorColumnName(); if ( discriminatorColumnName != null ) { // InheritanceType.SINGLE_TABLE Document discriminatorFilter = createDiscriminatorFilter( entityPersister, discriminatorColumnName ); if ( query.keySet().isEmpty() ) { return discriminatorFilter; } else { return new Document( "$and", Arrays.asList( query, discriminatorFilter ) ); } } else if ( entityPersister.hasSubclasses() ) { // InheritanceType.TABLE_PER_CLASS @SuppressWarnings("unchecked") Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); throw log.queriesOnPolymorphicEntitiesAreNotSupportedWithTablePerClass( "MongoDB", subclassEntityNames ); } return query; }
Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); identifier( queryBuilder, targetAlias ); queryBuilder.append( "." );
@Override public boolean isForeignJoinColumn(EntityType<?> ownerType, String attributeName) { AbstractEntityPersister persister = getEntityPersister(ownerType); Type propertyType = persister.getPropertyType(attributeName); if (propertyType instanceof OneToOneType) { OneToOneType oneToOneType = (OneToOneType) propertyType; // It is foreign if there is a mapped by attribute // But as of Hibernate 5.4 we noticed that we have to treat nullable one-to-ones as "foreign" as well return (oneToOneType).getRHSUniqueKeyPropertyName() != null || isNullable(oneToOneType); } // Every entity persister has "owned" properties on table number 0, others have higher numbers int tableNumber = persister.getSubclassPropertyTableNumber(attributeName); return tableNumber >= persister.getEntityMetamodel().getSubclassEntityNames().size(); }
private void applyInheritanceStrategy(OgmEntityPersister entityPersister, InfinispanRemoteQueryBuilder queryBuilder) { String discriminatorColumnName = entityPersister.getDiscriminatorColumnName(); if ( discriminatorColumnName != null ) { addConditionOnDiscriminatorValue( entityPersister, queryBuilder, discriminatorColumnName ); } else if ( entityPersister.hasSubclasses() ) { Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); throw LOG.queriesOnPolymorphicEntitiesAreNotSupportedWithTablePerClass( "Infinispan Server", subclassEntityNames ); } }
private void appendDiscriminatorClause(StringBuilder queryBuilder, String targetAlias, StringBuilder whereCondition) { OgmEntityPersister entityPersister = getEntityPersister( targetType ); String discriminatorColumnName = entityPersister.getDiscriminatorColumnName(); if ( discriminatorColumnName != null ) { // InheritanceType.SINGLE_TABLE addConditionOnDiscriminatorValue( queryBuilder, targetAlias, whereCondition, entityPersister, discriminatorColumnName ); } else if ( entityPersister.hasSubclasses() ) { // InheritanceType.TABLE_PER_CLASS @SuppressWarnings("unchecked") Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); throw LOG.queriesOnPolymorphicEntitiesAreNotSupportedWithTablePerClass( "Neo4j", subclassEntityNames ); } }
private void addConditionOnDiscriminatorValue(OgmEntityPersister entityPersister, InfinispanRemoteQueryBuilder queryBuilder, String discriminatorColumnName) { Object discriminatorValue = entityPersister.getDiscriminatorValue(); Set<String> subclassEntityNames = entityPersister.getEntityMetamodel().getSubclassEntityNames(); if ( queryBuilder.hasWhere() ) { queryBuilder.append( " and " ); } else { queryBuilder.append( " where " ); } queryBuilder.append( discriminatorColumnName ); if ( subclassEntityNames.size() == 1 ) { queryBuilder.append( " = " ); queryBuilder.appendValue( discriminatorValue ); } else { List<Object> discriminatorValues = new ArrayList<>(); for ( String subclass : subclassEntityNames ) { OgmEntityPersister subclassPersister = (OgmEntityPersister) sessionFactory.getMetamodel().entityPersister( subclass ); discriminatorValues.add( subclassPersister.getDiscriminatorValue() ); } queryBuilder.append( " in (" ); queryBuilder.appendValues( discriminatorValues ); queryBuilder.append( ")" ); } }