使用morphia在mongo集合中找不到字段

时间:2016-07-14 09:28:05

标签: java mongodb scala morphia

我有一个抽象的Scala类作为Mongo集合。

@Entity("aclTemplate")
abstract class AclTemplate(@(Id@field) var id: String) extends Serializable

另一个类扩展了上面的

@Entity("aclTemplate")
class GroupACLTemplate(id: String, var groupRoleAccess: Set[GroupRoleAccess]) extends AclTemplate(id) with Serializable 

集合中有一些GroupACLTemplate的文档。我正在尝试一个简单的查询

createQuery().disableValidation().field("groupRoleAccess.groupId").equal(groupId).asList();

这会抛出ValidationException

org.mongodb.morphia.query.ValidationException: The field 'groupRoleAccess.groupId' could not be found in 'com.model.acl.AclTemplate'

我认为这不是因为吗啡中长期存在的多态性问题。因为当我尝试仅访问groupRoleAccess时,它就可以了。但是,它无法访问该组内部。这是一个普通的Java集。这是GroupRoleAccess

class GroupRoleAccess(var groupId: String, var roleId: String) extends Serializable

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我设法破解了一些东西。显然,由于集合是一个抽象类,Mongo / Morphia不会查找其子类中存在的属性。所以我使用了createQuery并传递了子类的类。

ds.createQuery(clazz).disableValidation().field("groupRoleAccess.groupId").equal(groupId).asList();

但我仍然想知道它是如何在

之前提取groupRoleAccess

答案 1 :(得分:0)

您应该尝试1.3.0-SNAPSHOT。我刚修复了类似于此的错误,它也可能解决了你的问题。