public static void fixSchemaInFormulas(Configuration cfg) { cfg.buildMappings(); String schema = cfg.getProperty("default_schema"); if (schema!=null) { for (Iterator i=cfg.getClassMappings();i.hasNext();) { PersistentClass pc = (PersistentClass)i.next(); for (Iterator j=pc.getPropertyIterator();j.hasNext();) { Property p = (Property)j.next(); for (Iterator k=p.getColumnIterator();k.hasNext();) { Selectable c = (Selectable)k.next(); if (c instanceof Formula) { Formula f = (Formula)c; if (f.getFormula()!=null && f.getFormula().indexOf("%SCHEMA%")>=0) { f.setFormula(f.getFormula().replaceAll("%SCHEMA%", schema)); sLog.debug("Schema updated in "+pc.getClassName()+"."+p.getName()+" to "+f.getFormula()); } } } } } } }
private static boolean applyNotNull(Property property, ConstraintDescriptor<?> descriptor) { boolean hasNotNull = false; if ( NotNull.class.equals( descriptor.getAnnotation().annotationType() ) ) { // single table inheritance should not be forced to null due to shared state if ( !( property.getPersistentClass() instanceof SingleTableSubclass ) ) { //composite should not add not-null on all columns if ( !property.isComposite() ) { final Iterator<Selectable> iter = property.getColumnIterator(); while ( iter.hasNext() ) { final Selectable selectable = iter.next(); if ( Column.class.isInstance( selectable ) ) { Column.class.cast( selectable ).setNullable( false ); } else { LOG.debugf( "@NotNull was applied to attribute [%s] which is defined (at least partially) " + "by formula(s); formula portions will be skipped", property.getName() ); } } } } hasNotNull = true; } return hasNotNull; }
private void internalInitSubclassPropertyAliasesMap(String path, Iterator propertyIterator) { while ( propertyIterator.hasNext() ) { Property prop = ( Property ) propertyIterator.next(); String propname = path == null ? prop.getName() : path + "." + prop.getName(); if ( prop.isComposite() ) { Component component = ( Component ) prop.getValue(); Iterator compProps = component.getPropertyIterator(); internalInitSubclassPropertyAliasesMap( propname, compProps ); } else { String[] aliases = new String[prop.getColumnSpan()]; String[] cols = new String[prop.getColumnSpan()]; Iterator colIter = prop.getColumnIterator(); int l = 0; while ( colIter.hasNext() ) { Selectable thing = ( Selectable ) colIter.next(); aliases[l] = thing.getAlias( getFactory().getDialect(), prop.getValue().getTable() ); cols[l] = thing.getText( getFactory().getDialect() ); // TODO: skip formulas? l++; } subclassPropertyAliases.put( propname, aliases ); subclassPropertyColumnNames.put( propname, cols ); } } }
private static List<Column> resolveColumns( Table table, Value value, PersisterCreationContext creationContext) { final String[] columnNames = new String[value.getColumnSpan()]; final String[] formulas = value.hasFormula() ? new String[value.getColumnSpan()] : null; //final SqlTypeDescriptor[] sqlTypeDescriptors = new SqlTypeDescriptor[value.getColumnSpan()]; final int[] jdbcTypeCodes = new int[value.getColumnSpan()]; final Iterator<Selectable> itr = value.getColumnIterator(); int i = 0; while ( itr.hasNext() ) { final Selectable selectable = itr.next(); if ( selectable instanceof org.hibernate.mapping.Column ) { // columnNames[i] = ( (org.hibernate.mapping.Column) selectable ).getQuotedName( // creationContext.getSessionFactory().getJdbcServices().getJdbcEnvironment().getDialect() // ); columnNames[i] = '`' + ( (org.hibernate.mapping.Column) selectable ).getName() + '`'; } else { if ( formulas == null ) { throw new HibernateException( "Value indicated it does not have formulas, but a formula was encountered : " + selectable ); } formulas[i] = ( (Formula) selectable ).getFormula(); } // todo : need access to the TypeConfiguration... //sqlTypeDescriptors[i] = creationContext.getSessionFactory() jdbcTypeCodes[i] = value.getType().sqlTypes( null )[i]; // todo : keep track of readers/writers... how exactly? // something like this vv ? // Column#applyReadExpression( col.getReadExpr( dialect ) ) // Column#applyWriteExpression( col.getWriteExpr() ) i++; } // makeColumns( // creationContext, // tableSelector, // columnNames, // formulas, // sqlTypeDescriptors (or just JDBC type codes?) // ) return PersisterHelper.makeValues( creationContext, // todo : a Table "selector"... table, columnNames, formulas, jdbcTypeCodes ); }
public HibernateEntityTableMappingImpl(Configuration configuration) { if(configuration==null){ throw new IllegalArgumentException("Null hibernate configuration"); } LOG.debug("Found hibernate configuration."); this.configuration = configuration; HibernateHelper.registerConfiguration(configuration); //init entityTableMap Iterator<PersistentClass> it = configuration.getClassMappings(); while(it.hasNext()){ PersistentClass pClass = it.next(); EntityMapping entityMapping = new EntityMapping(); entityMapping.setName(pClass.getEntityName()); Iterator<Property> iterator = pClass.getPropertyIterator(); while(iterator.hasNext()){ Property p = iterator.next(); Getter getter = p.getGetter(pClass.getMappedClass()); Member member = getter.getMember(); //ignore the collection field if(Collection.class.isAssignableFrom(getter.getReturnType())){ LOG.trace("ignore collection member :{}",member); continue; } Iterator<Selectable> colIt = p.getColumnIterator(); Selectable selectable = colIt.next(); if(selectable instanceof Column){ Column col = (Column)selectable; String fieldName = ObjectUtils.getterField(member.getName()); entityMapping.getFieldColumnMap().put(fieldName, col.getName()); EntityField entityField = new EntityField(fieldName,getter.getReturnType().getName()); entityMapping.getFieldMap().put(fieldName,entityField); } } entityTableMap.put(entityMapping.getName(), pClass.getTable().getName()); entityMappingMap.put(entityMapping.getName(),entityMapping); } LOG.debug("{} entities detected",entityMappingMap.size()); }