@PrePersist没有为引用的对象调用?

时间:2014-12-27 04:15:54

标签: mongodb morphia

我有一个这样的递归数据结构:

@Entity
class Node {
    @Id
    private Long id;

    @Reference
    private List<Node> children;

    ...

    @PrePersist
    void populateSequentialId() {
        // query data store for highest id and increment, then set the id field
    }
}

然后我填充一个Node对象树,所有这些都没有设置id。深度变化,但通常深度约为3级。

当我在没有孩子的对象上调用save()时,它可以工作。生成并设置id,并保存对象。这意味着@PrePerist按预期在该实体上被调用。

但是对于引用列表中的实体,从不调用@PrePersist,并且save调用由于空@Id字段而失败。

这是Morphia中的错误还是我的错误预期?

2 个答案:

答案 0 :(得分:0)

您需要自己保留每个文档。

所以如果A引用B:

  1. 坚持B
  2. 坚持A,所以你有B _id作为参考
  3. 否则操作将失败。

答案 1 :(得分:0)

类的生命周期注释仅在持久保存该类型的对象时使用。在字段上有@Reference注释时,这些引用的对象仅用于在引用文档中存储键值。引用的对象不会以任何方式保留或处理。您需要手动保存引用的对象,然后才会应用@PrePersist