Morphia无法识别我的@ID注释字段

时间:2016-07-07 13:22:25

标签: mongodb scala morphia

我想要坚持一个简单的POSO GroupACLTemplate。它是一个抽象类的子类。我已使用@Entity对其进行了注释,并且还有@Id

@Entity("aclTemplate")
@SerialVersionUID(1L)
class GroupACLTemplate(@(Id@field) id: String, groupRoleAccess: Set[GroupRoleAccess]) extends AclTemplate(id) with Serializable

当我部署战争时,我没有看到GroupACLTemplate的任何集合。我也试过这个

class GroupACLTemplate(@Id id: String, groupRoleAccess: Set[GroupRoleAccess]) extends AclTemplate(id) with Serializable

我添加了一个测试用例并尝试保存像这样的对象

@Inject
var aclTemplateRepository: AclTemplateRepository = _
aclTemplateRepository.save(aclTemplate.head)

错误说

NoId complained about com.java.sample.acl.GroupACLTemplate. : No field is annotated with @Id; but it is required

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:0)

如果您在github中提出问题,我可以看看。 Morphia使用类文件,所以一切都应该"只是工作"但是我们目前还没有针对scala类进行测试,所以对于scala如何编译为丢弃映射器的字节码,可能会有些奇怪。

答案 1 :(得分:0)

在声明构造函数参数时,如果我们不使用任何修饰符,Scala会将这些参数映射到private final变量。但是,如果添加var,则会将它们映射到private个变量。这就是我所做的改变。现在类声明看起来像

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

答案 2 :(得分:-1)

你应该使用来自morphia的Id而不是spring数据中的Id