Почему Java-драйвер MongoDB / Morphia дважды добавляет свойство в начало? - PullRequest
3 голосов
/ 26 июля 2011

Вот мои (примерные) объекты.Я не помещал никаких других аннотаций, кроме того, что требуется для Morphia:

package jungle;

@Entity
public class Monkey {
   String name;
   int bananas;
   @Embedded
   TreeHouse house;
}

И объект TreeHouse:

@Embedded
public class TreeHouse {
   String type;
   int distanceFromWater;
}

Я пытаюсь запросить на typeс помощью регулярных выражений.Вот запрос MongoDB, который я использую (и было доказано, что он работает через командную строку):

db.Monkey.find({ "house.type": { "$regex" : ".*coco.*", "$options": "i"}})

Я могу сгенерировать эту точную строку в Java, используя метод filter изQuery объект:

Query query = ...;
query = query.filter("house.type", 
              Pattern.compile(".*coco.*", Pattern.CASE_INSENSITIVE));

Однако, когда я пытаюсь запустить поиск в Java, я получаю ValidationException:

com.google.code.morphia.query.ValidationException: The field 'house' could not be
  found in 'jungle.Monkey' while validating - house.house.type; if you wish to
  continue please disable validation.

Обратите внимание на удвоение house.house.type.

Я использую Morphia версии 0.99 и версию 2.5 драйвера Java MongoDB.Я что-то не правильно делаю?Или это проблема, которая была исправлена ​​в более новой версии?

1 Ответ

3 голосов
/ 01 сентября 2012

Попробуйте этот трюк, он у меня работает:

query = query.disableValidation().filter("house.type", 
              Pattern.compile(".*coco.*", Pattern.CASE_INSENSITIVE));
...