У меня есть следующие классы:
class Document{
Map<EnumChannelType, Channel> data;
//some more fields
}
class Channel{
String topic;
//some more fields
}
enum EnumChannelType{
BASIC_CHANNEL(1), ADVANCED_CHANNEL(2),......;
int value;
//constructor and some methods
}
Теперь я хочу запросить topic внутри Channel. Если channelType известно, мы можем легко запросить, как показано ниже:
Query<Document> createQuery(EnumChannelType channelType, String topic){
Query<Document> query = dao.createQuery().disableValidation();
query.field("data." + channelType.name() + ".topic").equal(topic);
return query;
}
Но что, если я хочу получить запрос только для данных topic (channelType может быть любым)? Как мы можем создать запрос для этого?
Один из вариантов использует or следующим образом:
Query<Document> createQueryForTopic(String topic) {
Query<Document> query = dao.createQuery().disableValidation();
// add all possible Channel Types
query.or(query.criteria("data." + EnumChannelType.BASIC_CHANNEL.name() + ".topic").equal(topic),
query.criteria("data." + EnumChannelType.ADVANCED_CHANNEL.name() + ".topic").equal(topic),
/*...add criteria for all possible channel types*/);
return query;
}
Но это невозможно, если EnumChannelType меняется со временем или если EnumChannelType имеет большое количество членов (например, BASIC_CHANNEL(1), ADVANCED_CHANNEL(2),....).
Я ищу что-то вроде...
Query<Document> createQuery(String topic){
Query<Document> query = dao.createQuery().disableValidation();
// use some regex instead of ????
query.field("data." + ???? + ".topic").equal(topic);
return query;
}
keysизmap.. (посмотрите в моем примере,EnumChannelTypeиспользуются в качестве ключа на карте) - person N D Thokare   schedule 05.07.2013