3

这是我的(示例)对象。除了 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"}})

我可以使用filter来自Query对象的方法在 Java 中生成这个确切的字符串:

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

我正在使用 0.99 版的 Morphia,并使用 2.5 版的 MongoDB Java 驱动程序。我没有正确地做某事吗?或者这是一个已在较新版本中修复的问题?

4

1 回答 1

3

Try this trick, it works for me:

query = query.disableValidation().filter("house.type", 
              Pattern.compile(".*coco.*", Pattern.CASE_INSENSITIVE));
于 2012-08-31T22:18:33.600 回答