1

私は次のクラスを持っています:

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何でもかまいません)。このクエリを作成するにはどうすればよいでしょうか。

1つのオプションは次のように使用し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;
}
4

1 に答える 1