【问题标题】:morphia save() method - how to determine success or failuremorphia save() 方法 - 如何确定成功或失败
【发布时间】:2014-12-31 15:49:22
【问题描述】:

我在 MongoDB 中使用 Morphia 0.109。我的文档集合使用字符串值作为 _id 字段,例如

@Entity
class MyEntity {
  @Id
  private String entityId;
  ...
}

当我调用 Datastore 或 BasicDAO save() 方法来插入其中一项时,我会根据需要使用唯一值填充 _id 字段 (entityId)。 save() 方法返回一个 Key 类型的值。

我的问题是,如何通过检查返回的 Key 来确定保存操作是成功还是失败?我不能依赖检查 Morphia 是否填写了 _id 字段的技巧,因为我必须在调用 save() 之前填写它。

【问题讨论】:

    标签: mongodb morphia


    【解决方案1】:

    这是因为您使用的是String 而不是ObjectId。有什么特别的原因吗?

    一般来说,根据您的情况使用正确的WriteConcern,这是速度和数据安全之间的权衡。如果您声明的要求无法满足,您将遇到异常——例如JOURNAL_SAFE

    网络问题和服务器错误引发异常;写操作等待服务器对磁盘上的日志文件进行分组提交。

    【讨论】:

    • 我没有使用 ObjectId,因为我不需要 MongoDB 将免费项目添加到我的文档中。我已经有一个唯一的字符串值键。
    • 我看不到 WriteConcern 如何解决我的问题。我的问题不在于 MongoDB 在确认写入成功之前等待多长时间,而在于 MongoDB 如何将成功或失败传达给我。
    • MongoDB 通常针对良好/常规情况进行优化,例如使用乐观锁定而不是悲观锁定。因此,如果出现问题,它会引发异常(添加到初始答案中的示例);如果一切正常,则没有/没有异常发生。将String 用于_id 可以很好地工作,请注意在使用@Reference 时是否遇到问题。
    • Morphia API 不包含“throws”子句,那么我如何知道在什么情况下会抛出哪些异常?
    • 这是一个未经检查的异常,因此请查看源代码:github.com/mongodb/mongo-java-driver/blob/… 注意save() 返回WriteResult,您可以使用它的方法getError(),但由于信息已经在异常中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2018-08-26
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多