Я пытаюсь настроить классы Hibernate не через XML / Annotation, а используя их программный API:
Mappings mappings = configuration.createMappings();
mappings.addClass(...);
Пример добавления столбца:
public void addColumn(String colName, String accessorName, NullableType type)
{
if(this._table == null)
{
return;
}
Column column = new Column(colName);
// this._table.addColumn(column);
Property prop = new Property();
prop.setName(accessorName);
SimpleValue simpleValue = new SimpleValue();
simpleValue.setTypeName(type.getName());
simpleValue.addColumn(column);
simpleValue.setTable(_table);
prop.setValue(simpleValue);
this._rootClass.addProperty(prop);
}
Это работает, пока в первый раз мне не нужно добавить столбец с именем, которое уже существует. Я не добавляю один и тот же столбец в одну и ту же таблицу, это две разные таблицы, но, тем не менее, я получаю
ERROR: java.lang.NullPointerException
at
org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:711)
Я проверил по исходному коду (я использую Hibernate 3.3.1 GA), и в PersistentClass есть строка, строка 711:
protected void checkColumnDuplication() {
HashSet cols = new HashSet(); <=========After this line 'cols' already contain data!
if (getIdentifierMapper() == null ) {
//an identifier mapper => getKey will be included in the getNonDuplicatedPropertyIterator()
//and checked later, so it needs to be excluded
checkColumnDuplication( cols, getKey().getColumnIterator() );
}
checkColumnDuplication( cols, getDiscriminatorColumnIterator() );
checkPropertyColumnDuplication( cols, getNonDuplicatedPropertyIterator() );
Iterator iter = getJoinIterator();
while ( iter.hasNext() ) {
cols.clear();
Join join = (Join) iter.next();
checkColumnDuplication( cols, join.getKey().getColumnIterator() );
checkPropertyColumnDuplication( cols, join.getPropertyIterator() );
}
}
Кто-нибудь пытался настроить его таким образом, была такая же проблема? ...
Заранее спасибо