protected AnnotationPersistenceMetaDataSerializer newAnnotationSerializer() { AnnotationPersistenceMappingSerializer ser = new AnnotationPersistenceMappingSerializer((JDBCConfiguration) repos.getConfiguration()); ser.setSyncMappingInfo(true); return ser; }
/** * Creates an an annotation builder for the specified class metadata * and adds it to list of builders. */ protected AnnotationBuilder addAnnotation( Class<? extends Annotation> annType, QueryResultMapping meta) { AnnotationBuilder ab = newAnnotationBuilder(annType); if (meta == null) return ab; addAnnotation(ab, meta); return ab; }
@Override protected void serializeQueryMappings(ClassMetaData meta) { for (QueryResultMapping res : getQueryResultMappings(meta)) serializeQueryResultMapping(res, meta); }
@Override protected void addSystemMappingElements(Collection toSerialize) { if (isQueryMode()) toSerialize.addAll(getQueryResultMappings(null)); }
case ONE_ONE: case MANY_ONE: serializeColumns(field.getValueInfo(), ColType.JOIN, field.getMappingInfo().getTableName(), null, fmd); return; if (field.getMappingInfo().getJoinDirection() == MappingInfo.JOIN_NONE) { serializeColumns(field.getElementMapping().getValueInfo(), ColType.JOIN, null, null, fmd); return; .hasSchemaComponents()) { AnnotationBuilder abJoinTbl = addAnnotation(JoinTable.class, fmd); String table = field.getMappingInfo().getTableName(); if (table != null) { serializeColumns(field.getMappingInfo(), ColType.JOIN, null, abJoinTbl, null); serializeColumns(field.getElementMapping().getValueInfo(), ColType.INVERSE, null, abJoinTbl, null); serializeColumns(field.getValueInfo(), ColType.COL, field.getMappingInfo().getTableName(), null, fmd); if (strategy == PersistenceStrategy.BASIC && isLob(field)) { addAnnotation(Lob.class, fmd); TemporalType temporal = getTemporal(field);
@Override protected void serializeClassMappingContent(ClassMetaData mapping) { ClassMapping cls = (ClassMapping) mapping; ClassMappingInfo info = cls.getMappingInfo(); AnnotationBuilder abTable = addAnnotation(Table.class, mapping); serializeTable(info.getTableName(), Strings .getClassName(mapping.getDescribedType()), null, info.getUniques(), abTable); serializeColumns(info, ColType.PK_JOIN, null, abTable, cls); for (String second : info.getSecondaryTableNames()) { AnnotationBuilder abSecTable = addAnnotation(SecondaryTable.class, mapping); serializeTable(second, null, info, null, abSecTable); } }
/** * Serialize the columns in the given mapping info. */ private void serializeColumns(MappingInfo info, ColType type, String secondary, AnnotationBuilder ab, Object meta) { List<Column> cols = (List<Column>) info.getColumns(); if (cols == null) return; AnnotationBuilder abContainer = ab; if (cols.size() > 1) { Class grpType = type.getColumnGroupAnnotationType(); if (null != grpType) { AnnotationBuilder abGrp = newAnnotationBuilder(grpType); if (null == ab) addAnnotation(abGrp, meta); else ab.add(null, abGrp); abContainer = abGrp; } } for (Column col : cols) serializeColumn(col, type, secondary, info.getUnique() != null, abContainer, meta); }
@Override protected void serializeInheritanceContent(ClassMetaData mapping) { ClassMapping cls = (ClassMapping) mapping; ClassMappingInfo info = cls.getMappingInfo(); DiscriminatorMappingInfo dinfo = cls.getDiscriminator() .getMappingInfo(); String strat = info.getHierarchyStrategy(); if (null == strat) return; String itypecls = ClassUtil.getClassName(InheritanceType.class); AnnotationBuilder abInheritance = addAnnotation(Inheritance.class, mapping); if (FlatClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".SINGLE_TABLE"); else if (VerticalClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".JOINED"); else if (FullClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".TABLE_PER_CLASS"); if (dinfo.getValue() != null) { AnnotationBuilder abDiscVal = addAnnotation(DiscriminatorValue.class, mapping); abDiscVal.add(null, dinfo.getValue()); } AnnotationBuilder abDiscCol = addAnnotation(DiscriminatorColumn.class, mapping); serializeColumns(dinfo, ColType.DISC, null, abDiscCol, null); }
@Override public void addAll(MetaDataRepository repos) { super.addAll(repos); for (QueryResultMapping res : ((MappingRepository) repos) .getQueryResultMappings()) addQueryResultMapping(res); }
@Override protected void serializeClass(ClassMetaData meta) { if (_sync && isMappingMode() && meta instanceof ClassMapping) { // sync if resolved and mapped ClassMapping cls = (ClassMapping) meta; if ((cls.getResolve() & MetaDataModes.MODE_MAPPING) != 0 && cls.isMapped()) { cls.syncMappingInfo(); cls.getDiscriminator().syncMappingInfo(); cls.getVersion().syncMappingInfo(); FieldMapping[] fields; if (cls.getEmbeddingMetaData() == null) fields = cls.getDefinedFieldMappings(); else fields = cls.getFieldMappings(); for (FieldMapping f : fields) f.syncMappingInfo(); } } super.serializeClass(meta); }
/** * Return field's temporal type. */ private TemporalType getTemporal(FieldMapping field) { if (field.getDeclaredTypeCode() != JavaTypes.DATE && field.getDeclaredTypeCode() != JavaTypes.CALENDAR) return null; DBDictionary dict = ((JDBCConfiguration) getConfiguration()) .getDBDictionaryInstance(); int def = dict.getJDBCType(field.getTypeCode(), false); for (Column col : (List<Column>) field.getValueInfo().getColumns()) { if (col.getType() == def) continue; switch (col.getType()) { case Types.DATE: return TemporalType.DATE; case Types.TIME: return TemporalType.TIME; case Types.TIMESTAMP: return TemporalType.TIMESTAMP; } } return null; }
@Override protected void serializeSequence(SequenceMetaData meta) { if (SequenceMapping.IMPL_VALUE_TABLE.equals(meta.getSequencePlugin())) { super.serializeSequence(meta); return; } AnnotationBuilder abTblGen = addAnnotation(TableGenerator.class, meta); SequenceMapping seq = (SequenceMapping) meta; abTblGen.add("name", seq.getName()); String table = seq.getTable(); if (table != null) { int dotIdx = table.indexOf('.'); if (dotIdx == -1) abTblGen.add("table", table); else { abTblGen.add("table", table.substring(dotIdx + 1)); abTblGen.add("schema", table.substring(0, dotIdx)); } } if (!StringUtils.isEmpty(seq.getPrimaryKeyColumn())) abTblGen.add("pkColumnName", seq.getPrimaryKeyColumn()); if (!StringUtils.isEmpty(seq.getSequenceColumn())) abTblGen.add("valueColumnName", seq.getSequenceColumn()); if (!StringUtils.isEmpty(seq.getPrimaryKeyValue())) abTblGen.add("pkColumnValue", seq.getPrimaryKeyValue()); if (seq.getAllocate() != 50 && seq.getAllocate() != -1) abTblGen.add("allocationSize", seq.getAllocate() + ""); if (seq.getInitialValue() != 0 && seq.getInitialValue() != -1) abTblGen.add("initialValue", seq.getInitialValue() + ""); }
case ONE_ONE: case MANY_ONE: serializeColumns(field.getValueInfo(), ColType.JOIN, field.getMappingInfo().getTableName(), null, fmd); return; if (field.getMappingInfo().getJoinDirection() == MappingInfo.JOIN_NONE) { serializeColumns(field.getElementMapping().getValueInfo(), ColType.JOIN, null, null, fmd); return; .hasSchemaComponents()) { AnnotationBuilder abJoinTbl = addAnnotation(JoinTable.class, fmd); String table = field.getMappingInfo().getTableName(); if (table != null) { serializeColumns(field.getMappingInfo(), ColType.JOIN, null, abJoinTbl, null); serializeColumns(field.getElementMapping().getValueInfo(), ColType.INVERSE, null, abJoinTbl, null); serializeColumns(field.getValueInfo(), ColType.COL, field.getMappingInfo().getTableName(), null, fmd); if (strategy == PersistenceStrategy.BASIC && isLob(field)) { addAnnotation(Lob.class, fmd); TemporalType temporal = getTemporal(field);
@Override protected void serializeClassMappingContent(ClassMetaData mapping) { ClassMapping cls = (ClassMapping) mapping; ClassMappingInfo info = cls.getMappingInfo(); AnnotationBuilder abTable = addAnnotation(Table.class, mapping); serializeTable(info.getTableName(), ClassUtil.getClassName(mapping.getDescribedType()), null, info.getUniques(info.getTableName()), abTable); serializeColumns(info, ColType.PK_JOIN, null, abTable, cls); for (String second : info.getSecondaryTableNames()) { AnnotationBuilder abSecTable = addAnnotation(SecondaryTable.class, mapping); serializeTable(second, null, info, info.getUniques(second), abSecTable); } }
/** * Serialize the columns in the given mapping info. */ private void serializeColumns(MappingInfo info, ColType type, String secondary, AnnotationBuilder ab, Object meta) { List<Column> cols = (List<Column>) info.getColumns(); if (cols == null) return; AnnotationBuilder abContainer = ab; if (cols.size() > 1) { Class grpType = type.getColumnGroupAnnotationType(); if (null != grpType) { AnnotationBuilder abGrp = newAnnotationBuilder(grpType); if (null == ab) addAnnotation(abGrp, meta); else ab.add(null, abGrp); abContainer = abGrp; } } for (Column col : cols) serializeColumn(col, type, secondary, info.getUnique() != null, abContainer, meta); }
@Override protected void addSystemMappingElements(Collection toSerialize) { if (isQueryMode()) toSerialize.addAll(getQueryResultMappings(null)); }
@Override protected void serializeInheritanceContent(ClassMetaData mapping) { ClassMapping cls = (ClassMapping) mapping; ClassMappingInfo info = cls.getMappingInfo(); DiscriminatorMappingInfo dinfo = cls.getDiscriminator() .getMappingInfo(); String strat = info.getHierarchyStrategy(); if (null == strat) return; String itypecls = Strings.getClassName(InheritanceType.class); AnnotationBuilder abInheritance = addAnnotation(Inheritance.class, mapping); if (FlatClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".SINGLE_TABLE"); else if (VerticalClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".JOINED"); else if (FullClassStrategy.ALIAS.equals(strat)) abInheritance.add("strategy", itypecls + ".TABLE_PER_CLASS"); if (dinfo.getValue() != null) { AnnotationBuilder abDiscVal = addAnnotation(DiscriminatorValue.class, mapping); abDiscVal.add(null, dinfo.getValue()); } AnnotationBuilder abDiscCol = addAnnotation(DiscriminatorColumn.class, mapping); serializeColumns(dinfo, ColType.DISC, null, abDiscCol, null); }
@Override public void addAll(MetaDataRepository repos) { super.addAll(repos); for (QueryResultMapping res : ((MappingRepository) repos) .getQueryResultMappings()) addQueryResultMapping(res); }
@Override protected void serializeClass(ClassMetaData meta) { if (_sync && isMappingMode() && meta instanceof ClassMapping) { // sync if resolved and mapped ClassMapping cls = (ClassMapping) meta; if ((cls.getResolve() & MetaDataModes.MODE_MAPPING) != 0 && cls.isMapped()) { cls.syncMappingInfo(); cls.getDiscriminator().syncMappingInfo(); cls.getVersion().syncMappingInfo(); FieldMapping[] fields; if (cls.getEmbeddingMetaData() == null) fields = cls.getDefinedFieldMappings(); else fields = cls.getFieldMappings(); for (FieldMapping f : fields) f.syncMappingInfo(); } } super.serializeClass(meta); }
/** * Return field's temporal type. */ private TemporalType getTemporal(FieldMapping field) { if (field.getDeclaredTypeCode() != JavaTypes.DATE && field.getDeclaredTypeCode() != JavaTypes.CALENDAR) return null; DBDictionary dict = ((JDBCConfiguration) getConfiguration()) .getDBDictionaryInstance(); int def = dict.getJDBCType(field.getTypeCode(), false); for (Column col : (List<Column>) field.getValueInfo().getColumns()) { if (col.getType() == def) continue; switch (col.getType()) { case Types.DATE: return TemporalType.DATE; case Types.TIME: return TemporalType.TIME; case Types.TIMESTAMP: return TemporalType.TIMESTAMP; } } return null; }