Использование перегруженных методов в этом случае невозможно без предварительного приведения объекта, так как программа не будет вызывать перегруженный метод, если явный тип объекта не совпадает. Поэтому он не будет вызывать процесс (B objB), если только передаваемый вами объект явно не относится к классу B.
Чтобы избежать слишком больших хлопот, есть несколько способов сделать это. В зависимости от того, что различает B и C, вы можете создать экземпляр A как этот тип при извлечении объекта из базы данных (это можно сделать в RowMapper) и написать оператор if else, чтобы определить, какой процесс вызывать:
if(a.getClass() == B.class)
{
return process((B) a);
}
else
{
return process((C) a);
}
Или, если у вас есть больше подклассов, вы можете использовать оператор switch. Это самый простой способ, о котором я могу думать.