java - 使用吗啡无法在 mongo 集合中找到字段

标签 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

我在这里遗漏了什么吗?

最佳答案

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

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

但我仍然想知道它之前是如何提取groupRoleAccess

关于java - 使用吗啡无法在 mongo 集合中找到字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38370493/

相关文章:

java - java中的高效排列算法

javascript - MongoDB 中的通配符搜索

scala - 无法使 Spark 在 Intellij Idea 中的 scala 工作表内运行

scala - 值(value) !不是 Actor 的成员

java - 打印 Tomcat DBCP DataSource 对象的属性

JAVA - 为扩展另一个类的子类的字段设置值

java - 对 BLOB 进行操作需要太多时间

mongodb - 在列表中显示mongo中的相应字段

mongodb - 在 mongodb 中选择嵌套字段

scala - 什么时候应该使用应用程序而不是单子(monad)?