final Object o = pattern.getObject();
final ObjectSpecification patternSpec = pattern.getSpecification();
final List<ObjectAssociation> patternAssociations = patternSpec.getAssociations();
for (final ObjectAssociation patternAssoc : patternAssociations) {
final Method method;
final Identifier identifier = patternAssoc.getIdentifier();
final String memberName = identifier.getMemberName();
final String methodName = memberName.substring(0, 1).toUpperCase() + memberName.substring(1);
try {
if (true) {
final ObjectAdapter field = patternAssoc.get(pattern);
if (field != null) {
final String id = patternAssoc.getId();
try {
final ObjectAssociation oa = spec.getAssociation(id);
final NotPersistedFacet fc = oa.getFacet(NotPersistedFacet.class);
if (fc != null) {
continue;
}
} catch (final ObjectSpecificationException e) {
// this is OK
}
if (foundFields == 0) {
sql.append(" WHERE ");
initialLength = sql.length();
}
if (sql.length() > initialLength) {
sql.append(" AND ");
}
final FieldMapping fieldMapping = fieldMappingFor(patternAssoc);
if (fieldMapping != null) {
fieldMapping.appendWhereClause(connector, sql, pattern);
} else {
// Have to use getXXX method if the fieldMapping is
// null..
final ObjectSpecification specification = patternAssoc.getSpecification();
method = o.getClass().getMethod("get" + methodName, (Class<?>[]) null);
final Object res = InvokeUtils.invoke(method, o);
if (specification.isValue()) {
// If the property (memberName) is a value type,
// use the value.
final String fieldName = Sql.sqlFieldName(identifier.getMemberName());
sql.append(fieldName + "=?");
connector.addToQueryValues(res);
} else {
throw new SqlObjectStoreException("Unhandled combination!");
}