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

Morphia does not recognize my @ID annotated field

我有一个简单的 POSO GroupACLTemplate,我想坚持下去。它是从摘要class 中提取的class。我用 @Entity 注释了它,还有一个 @Id

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

当我部署 war 时,我没有看到 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

我是不是漏掉了什么?

如果您在 github 中提交问题,我可以查看。 Morphia 使用 class 文件,所以一切都应该 "just work" 但我们目前没有针对 scala classes 进行测试,所以也许 scala 编译成字节码的方式有点奇怪,这会抛弃映射器。

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

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

你应该使用来自吗啡的 ID 而不是来自 spring 数据的 ID