private boolean[] loadGroupMask(String groupName, boolean[] defaultGroup) { List<String> fieldNames = metadata.getLoadGroup(groupName); boolean[] group = new boolean[tableFields.length]; if (defaultGroup != null) System.arraycopy(defaultGroup, 0, group, 0, group.length); for (String fieldName : fieldNames) { JDBCFieldBridge field = (JDBCFieldBridge) getFieldByName(fieldName); if (field == null) throw MESSAGES.fieldNotFound(fieldName, getEntityName()); if (field instanceof JDBCCMRFieldBridge) { JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) field; if (cmrField.hasForeignKey()) { JDBCCMPFieldBridge[] fkFields = (JDBCCMPFieldBridge[]) cmrField.getForeignKeyFields(); for (int i = 0; i < fkFields.length; ++i) { group[fkFields[i].getTableIndex()] = true; } } else { throw MESSAGES.onlyCmrFieldsWithFkInLoadGroup(fieldName); } } else { group[((JDBCCMPFieldBridge) field).getTableIndex()] = true; } } return group; }