in rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java [198:233]
private HashSet getChangedFields(MappingWrapper config, ChangeSummary summary, DataObject obj, TableWrapper tw) {
HashSet changes = new HashSet();
Iterator i = summary.getOldValues(obj).iterator();
while (i.hasNext()) {
ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next();
if (setting.getProperty().getType().isDataType()) {
if ( changes.add(setting.getProperty()) == false ) {
throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
}
} else {
Property ref = setting.getProperty();
Relationship relationship = config.getRelationshipByReference(ref);
if ((ref.getOpposite() != null && ref.getOpposite().isMany())
|| (hasState(tw, relationship, obj))) {
RelationshipWrapper r = new RelationshipWrapper(config.getRelationshipByReference(ref));
Iterator keys = r.getForeignKeys().iterator();
while (keys.hasNext()) {
String key = (String) keys.next();
String keyProperty = config.getColumnPropertyName(tw.getTableName(), key);
Property keyProp = obj.getType().getProperty(keyProperty);
if ( keyProp == null ) {
throw new RuntimeException("Invalid foreign key column: " + key);
}
if (changes.add(keyProp) == false) {
throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
}
}
}
}
}
return changes;
}