public void map(boolean adapt) { ClassMapping cls = disc.getClassMapping(); if (cls.getJoinablePCSuperclassMapping() != null || cls.getEmbeddingMetaData() != null) throw new MetaDataException(_loc.get("not-base-disc", cls)); DiscriminatorMappingInfo info = disc.getMappingInfo(); info.assertNoJoin(disc, true); info.assertNoForeignKey(disc, !adapt); info.assertNoUnique(disc, false); Column tmplate = new Column(); tmplate.setJavaType(getJavaType()); tmplate.setName("typ"); Column[] cols = info.getColumns(disc, new Column[]{ tmplate }, adapt); disc.setColumns(cols); disc.setColumnIO(info.getColumnIO()); Index idx = info.getIndex(disc, cols, adapt); disc.setIndex(idx); }
public void copy(MappingInfo info) { super.copy(info); if (!(info instanceof DiscriminatorMappingInfo)) return; if (_value == null) _value = ((DiscriminatorMappingInfo) info).getValue(); } }
/** * Create raw mapping info for the given instance. */ protected DiscriminatorMappingInfo newMappingInfo(Discriminator disc) { return new DiscriminatorMappingInfo(); }
clear(false); setColumnIO(disc.getColumnIO()); syncColumns(disc, disc.getColumns(), disc.getValue() != null && !(disc.getValue() instanceof String)); syncIndex(disc, disc.getIndex()); if (disc.getValue() == Discriminator.NULL) _value = "null"; setStrategy(strat);
public void installStrategy(Discriminator discrim) { DiscriminatorStrategy strat = repos.namedStrategy(discrim); if (strat == null) strat = repos.defaultStrategy(discrim, true); try { discrim.setStrategy(strat, Boolean.TRUE); } catch (MetaDataException mde) { // if this is a custom strategy, don't attempt to override if (isCustomStrategy(strat)) throw mde; repos.getLog().warn(_loc.get("fatal-change", discrim, mde.getMessage())); // retain old discriminator version, if any String val = discrim.getMappingInfo().getValue(); discrim.clearMapping(); discrim.getMappingInfo().setValue(val); discrim.setStrategy(repos.defaultStrategy(discrim, true), Boolean.TRUE); } }
@Override public Object getStrategy(Discriminator disc, boolean adapt) { Object strat = super.getStrategy(disc, adapt); ClassMapping cls = disc.getClassMapping(); if (strat != null || cls.getJoinablePCSuperclassMapping() != null || disc.getMappingInfo().getValue() != null) return strat; // don't use a column-based discriminator approach unless user has set // a column explicitly or is using flat inheritance explicitly if (!disc.getMappingInfo().getColumns().isEmpty()) return new ValueMapDiscriminatorStrategy(); ClassMapping base = cls; while (base.getMappingInfo().getHierarchyStrategy() == null && base.getPCSuperclassMapping() != null) base = base.getPCSuperclassMapping(); strat = base.getMappingInfo().getHierarchyStrategy(); if (FlatClassStrategy.ALIAS.equals(strat)) return new ValueMapDiscriminatorStrategy(); if (VerticalClassStrategy.ALIAS.equals(strat) && dict.joinSyntax != JoinSyntaxes.SYNTAX_TRADITIONAL) return new SubclassJoinDiscriminatorStrategy(); return NoneDiscriminatorStrategy.getInstance(); }
break; case DISCRIM_VAL: cm.getDiscriminator().getMappingInfo().setValue (((DiscriminatorValue) anno).value()); if (Modifier.isAbstract(cm.getDescribedType(). break; case DISCRIM_STRAT: cm.getDiscriminator().getMappingInfo().setStrategy (((DiscriminatorStrategy) anno).value()); break;
protected int getJavaType() { Object val = disc.getValue(); if (val != null && val != Discriminator.NULL) return JavaTypes.getTypeCode(val.getClass()); // if the user wants the type to be null, we need a jdbc-type // on the column or an existing column to figure out the java type DiscriminatorMappingInfo info = disc.getMappingInfo(); List cols = info.getColumns(); Column col = (cols.isEmpty()) ? null : (Column) cols.get(0); if (col != null) { if (col.getJavaType() != JavaTypes.OBJECT) return col.getJavaType(); if (col.getType() != Types.OTHER) return JavaTypes.getTypeCode(Schemas.getJavaType (col.getType(), col.getSize(), col.getDecimalDigits())); } return JavaTypes.STRING; }
/** * Parse discriminator-value. */ private void endDiscriminatorValue() { String val = currentText(); if (StringUtils.isEmpty(val)) return; ClassMapping cm = (ClassMapping) currentElement(); cm.getDiscriminator().getMappingInfo().setValue(val); if (Modifier.isAbstract(cm.getDescribedType().getModifiers()) && getLog().isInfoEnabled()) { getLog().info( _loc.get("discriminator-on-abstract-class", cm .getDescribedType().getName())); } }
public void map(boolean adapt) { ClassMapping cls = disc.getClassMapping(); if (cls.getJoinablePCSuperclassMapping() != null || cls.getEmbeddingMetaData() != null) throw new MetaDataException(_loc.get("not-base-disc", cls)); DiscriminatorMappingInfo info = disc.getMappingInfo(); info.assertNoSchemaComponents(disc, true); // make sure outer joins are supported DBDictionary dict = cls.getMappingRepository().getDBDictionary(); if (dict.joinSyntax == JoinSyntaxes.SYNTAX_TRADITIONAL) throw new MetaDataException(_loc.get("outer-join-support", cls)); }
/** * Clear mapping information, including strategy. */ public void clearMapping() { _strategy = null; _cols = Schemas.EMPTY_COLUMNS; _idx = null; _value = null; _info.clear(); setResolve(MODE_MAPPING | MODE_MAPPING_INIT, false); }
@Override protected boolean startExtendedClass(String elem, Attributes attrs) throws SAXException { ClassMapping mapping = (ClassMapping) currentElement(); String strategy = attrs.getValue("strategy"); if (!StringUtils.isEmpty(strategy)) mapping.getMappingInfo().setStrategy(strategy); String versionStrat = attrs.getValue("version-strategy"); if (!StringUtils.isEmpty(versionStrat)) mapping.getVersion().getMappingInfo().setStrategy(versionStrat); String discrimStrat = attrs.getValue("discriminator-strategy"); if (!StringUtils.isEmpty(discrimStrat)) mapping.getDiscriminator().getMappingInfo().setStrategy(discrimStrat); String subclassFetchMode = attrs.getValue("subclass-fetch-mode"); if (!StringUtils.isEmpty(subclassFetchMode)) mapping.setSubclassFetchMode(toEagerFetchModeConstant(subclassFetchMode)); return true; } }
clear(false); setColumnIO(disc.getColumnIO()); syncColumns(disc, disc.getColumns(), disc.getValue() != null && !(disc.getValue() instanceof String)); syncIndex(disc, disc.getIndex()); if (disc.getValue() == Discriminator.NULL) _value = "null"; setStrategy(strat);
public void installStrategy(Discriminator discrim) { DiscriminatorStrategy strat = repos.namedStrategy(discrim); if (strat == null) strat = repos.defaultStrategy(discrim, true); try { discrim.setStrategy(strat, Boolean.TRUE); } catch (MetaDataException mde) { // if this is a custom strategy, don't attempt to override if (isCustomStrategy(strat)) throw mde; repos.getLog().warn(_loc.get("fatal-change", discrim, mde.getMessage())); // retain old discriminator version, if any String val = discrim.getMappingInfo().getValue(); discrim.clearMapping(); discrim.getMappingInfo().setValue(val); discrim.setStrategy(repos.defaultStrategy(discrim, true), Boolean.TRUE); } }
@Override public Object getStrategy(Discriminator disc, boolean adapt) { Object strat = super.getStrategy(disc, adapt); ClassMapping cls = disc.getClassMapping(); if (strat != null || cls.getJoinablePCSuperclassMapping() != null || disc.getMappingInfo().getValue() != null) return strat; // don't use a column-based discriminator approach unless user has set // a column explicitly or is using flat inheritance explicitly if (!disc.getMappingInfo().getColumns().isEmpty()) return new ValueMapDiscriminatorStrategy(); ClassMapping base = cls; while (base.getMappingInfo().getHierarchyStrategy() == null && base.getPCSuperclassMapping() != null) base = base.getPCSuperclassMapping(); strat = base.getMappingInfo().getHierarchyStrategy(); if (FlatClassStrategy.ALIAS.equals(strat)) return new ValueMapDiscriminatorStrategy(); if (VerticalClassStrategy.ALIAS.equals(strat) && dict.joinSyntax != JoinSyntaxes.SYNTAX_TRADITIONAL) return new SubclassJoinDiscriminatorStrategy(); return NoneDiscriminatorStrategy.getInstance(); }
break; case DISCRIM_VAL: cm.getDiscriminator().getMappingInfo().setValue (((DiscriminatorValue) anno).value()); if (Modifier.isAbstract(cm.getDescribedType(). break; case DISCRIM_STRAT: cm.getDiscriminator().getMappingInfo().setStrategy (((DiscriminatorStrategy) anno).value()); break;
protected int getJavaType() { Object val = disc.getValue(); if (val != null && val != Discriminator.NULL) return JavaTypes.getTypeCode(val.getClass()); // if the user wants the type to be null, we need a jdbc-type // on the column or an existing column to figure out the java type DiscriminatorMappingInfo info = disc.getMappingInfo(); List cols = info.getColumns(); Column col = (cols.isEmpty()) ? null : (Column) cols.get(0); if (col != null) { if (col.getJavaType() != JavaTypes.OBJECT) return col.getJavaType(); if (col.getType() != Types.OTHER) return JavaTypes.getTypeCode(Schemas.getJavaType (col.getType(), col.getSize(), col.getDecimalDigits())); } return JavaTypes.STRING; }
/** * Parse discriminator-value. */ private void endDiscriminatorValue() { String val = currentText(); if (StringUtils.isEmpty(val)) return; ClassMapping cm = (ClassMapping) currentElement(); cm.getDiscriminator().getMappingInfo().setValue(val); if (Modifier.isAbstract(cm.getDescribedType().getModifiers()) && getLog().isInfoEnabled()) { getLog().info( _loc.get("discriminator-on-abstract-class", cm .getDescribedType().getName())); } }
public void map(boolean adapt) { ClassMapping cls = disc.getClassMapping(); if (cls.getJoinablePCSuperclassMapping() != null || cls.getEmbeddingMetaData() != null) throw new MetaDataException(_loc.get("not-base-disc", cls)); DiscriminatorMappingInfo info = disc.getMappingInfo(); info.assertNoSchemaComponents(disc, true); // make sure outer joins are supported DBDictionary dict = cls.getMappingRepository().getDBDictionary(); if (dict.joinSyntax == JoinSyntaxes.SYNTAX_TRADITIONAL) throw new MetaDataException(_loc.get("outer-join-support", cls)); }
/** * Clear mapping information, including strategy. */ public void clearMapping() { _strategy = null; _cols = Schemas.EMPTY_COLUMNS; _idx = null; _value = null; _info.clear(); setResolve(MODE_MAPPING | MODE_MAPPING_INIT, false); }