/** * Method to add a filter to restrict any discriminator property to valid values. * @param qd QueryData * @param clr ClassLoader resolver */ private void addDiscriminator(QueryData qd, ClassLoaderResolver clr) { if (qd.acmd.hasDiscriminatorStrategy()) { String className = qd.acmd.getFullClassName(); boolean includeSubclasses = query.isSubclasses(); DatastoreManager storeMgr = getStoreManager(); String discriminatorPropertyName = EntityUtils.getDiscriminatorPropertyName(storeMgr.getIdentifierFactory(), qd.acmd.getDiscriminatorMetaDataRoot()); // Note : we always restrict the discriminator since the user may at some later point add other classes // to be persisted here, or have others that have data but aren't currently active in the persistence process List<Object> discriminatorValues = new ArrayList<Object>(); discriminatorValues.add(qd.acmd.getDiscriminatorValue()); if (includeSubclasses) { for (String subClassName : storeMgr.getSubClassesForClass(className, true, clr)) { AbstractClassMetaData subCmd = storeMgr.getMetaDataManager().getMetaDataForClass(subClassName, clr); discriminatorValues.add(subCmd.getDiscriminatorValue()); } } qd.primaryDatastoreQuery.addFilter(discriminatorPropertyName, Query.FilterOperator.IN, discriminatorValues); } }
Collection<String> mdClasses = nucCtx.getMetaDataManager().getClassesWithMetaData(); storeMgr.addClasses(mdClasses.toArray(new String[mdClasses.size()]), clr); // Make sure all classes are in store if (cmd.hasDiscriminatorStrategy()) { String disProp = EntityUtils.getDiscriminatorPropertyName(storeMgr.getIdentifierFactory(), cmd.getDiscriminatorMetaDataForTable()); if (disProp != null && entity.hasProperty(disProp)) {
protected static Object getObjectUsingDatastoreIdForResult(final Result result, final AbstractClassMetaData cmd, final ExecutionContext ec, boolean ignoreCache, final int[] fpMembers, String tableName, StoreManager storeMgr, Table table) if (cmd.hasDiscriminatorStrategy())
protected static Object getObjectUsingApplicationIdForResult(final Result result, final AbstractClassMetaData cmd, final ExecutionContext ec, boolean ignoreCache, final int[] fpMembers, String tableName, StoreManager storeMgr, Table table) if (cmd.hasDiscriminatorStrategy())
protected static Object getObjectUsingNondurableIdForResult(final Result result, final AbstractClassMetaData cmd, final ExecutionContext ec, boolean ignoreCache, final int[] fpMembers, String tableName, StoreManager storeMgr, Table table) if (cmd.hasDiscriminatorStrategy())
scan.addColumn(familyName, qualifName); if (cmd.hasDiscriminatorStrategy())
if (rootCmd.hasDiscriminatorStrategy()) if (rootCmd.hasDiscriminatorStrategy() && cmdsForCollection.size() == 1)
if (!acmd.hasDiscriminatorStrategy()) { return clr.classForName(acmd.getFullClassName());
if (op.getClassMetaData().hasDiscriminatorStrategy()) { DiscriminatorMetaData dismd = op.getClassMetaData().getDiscriminatorMetaDataRoot(); EntityUtils.setEntityProperty(entity, dismd,
if (elemCmd.hasDiscriminatorStrategy()) { collDiscName = elemCmd.getDiscriminatorColumnName(); if (embmd != null && embmd.getDiscriminatorMetaData() != null) { if (elemCmd.hasDiscriminatorStrategy()) { arrDiscName = elemCmd.getDiscriminatorColumnName(); if (embmd != null && embmd.getDiscriminatorMetaData() != null) {
if (subclasses != null && subclasses.length > 0) if (rootEmbCmd.hasDiscriminatorStrategy())