Sad*_*mar 0 entity field mongodb morphia
使用morphia POJO映射器在mongodb中实现过滤器时遇到一些问题.
在我的类中(例如SampleClass),当我尝试访问@Entity类的字段时(在我们的例子中Person),我发现字段访问工作正常,使用点符号表示一般字段,如int,string,maps或直接嵌入对象.
问题是我无法理解它如何适用于Person类中引用的"对象列表"的情况.(假设在这里,一个人可以有很多地址,所以这个Person类有一个addresses包含Address对象列表的字段)
@Entity
Class Person
{
String name;
int age;
String type;
private Map<String, String> personalInfo= new HashMap<String, String>();
@Reference
List<Address> addresses = new ArrayList<Address>;
}
@Entity
Class Address
{
String streetName;
int doorNo;
}
Run Code Online (Sandbox Code Playgroud)
例如,我想对List streetName中的Address对象应用过滤器addresses
public class SampleClass
{
private Datastore ds;
Query<Node> query;
CriteriaContainer container;
// connections params etc....
public List<Person> sampleMethod()
{
query = ds.find( Person.class ).field( "type" ).equal( "GOOD");
container.add( query.criteria( "name" ).containsIgnoreCase("jo" ));
// general String field in the Person Class ---- OKAY, Work's Fine
container.add( query.criteria( "personalInfo.telephone" ).containsIgnoreCase( "458" ) );
// Map field in the Person Class, accessing telephone key value in the map --- OKAY, Work's Fine
container.add( query.criteria( "addresses.streetname").containsIgnoreCase( "mainstreet" ) );
// List of address object in the Person Class, name of the field is 'addresses'
// ----NOT OKAY ????????? -- Here is the problem it returns nothing, even though some value exists
return readTopography( query.asList() );
}
}
Run Code Online (Sandbox Code Playgroud)
我在访问列表中的对象时是否做错了什么?
"addresses"字段是@Reference,我们不能将"addresses.name"用作条件中的字段.它应该是一个标准,其中地址字段位于"List <Key <Address >>>"中:
Query<Person> personQuery = ds.createQuery(Person.class);
Query<Address> addressQuery = ds.createQuery(Address.class);
addressQuery.criteria("streetName").containsIgnoreCase("mainstreet");
container.add(personQuery.criteria("addresses").in(addressQuery.asKeyList()));
System.out.println(personQuery.asList());
Run Code Online (Sandbox Code Playgroud)
问候,悲伤
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |