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メソッドを使用して、Java でこの正確な文字列を生成できます。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 を使用しており、MongoDB Java ドライバーのバージョン 2.5 を使用しています。私は何かを正しくしていませんか?それとも、これは新しいバージョンで修正された問題ですか?

4

1 に答える 1

3

このトリックを試してください、それは私のために働きます:

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