【问题标题】:Prevent duplicate save using MongoRepository使用 MongoRepository 防止重复保存
【发布时间】:2014-12-17 11:10:17
【问题描述】:

我有一项服务可以在 mongo 中执行 CRUD 操作。我为此使用 MongoRepository。我遇到的问题是,当我插入重复条目时,我无法恢复任何错误。

@Document(collection = "test")
public class MongoInsert {

@Id
private String identifier;

private String value;

@PersistenceConstructor
public MongoInsert(String identifier, String value) {
    this.identifier = identifier;
    this.value = value;
}

}

我写了一个测试,尝试两次插入同一个对象,测试通过了,我期待第二次插入会抛出异常。

我的 mongoTemplate 定义是

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="myMongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="myMappingConverter"/>
    <property name="writeResultChecking" value="EXCEPTION"/>
</bean>

我尝试将“writeConcern”设置为“ACKNOWLEDGED”,但后来我出错了

引起:org.springframework.data.mongodb.UncategorizedMongoDbException: { "serverUsed" : "127.0.0.1:27017" , "ok" : 0 , "code" : 2 , "errmsg" : "cannot use non-当主机不是副本集的成员时,多数 'w' 模式已确认"};嵌套异常是 com.mongodb.CommandFailureException: { "serverUsed" : "127.0.0.1:27017" , "ok" : 0 , "code" : 2 , "errmsg" : "cannot use non-majority 'w' mode ACKNOWLEDGED when主机不是副本集的成员"}

我在这里错过了什么?

【问题讨论】:

    标签: mongotemplate mongorepository


    【解决方案1】:

    尝试使用代替

    <property name="writeConcern" value="ACKNOWLEDGED"/>
    

    这个

    <property name="writeConcern">
        <value type="com.mongodb.WriteConcern">ACKNOWLEDGED</value>
    </property>
    

    (详情:How assign bean's property an Enum value in Spring config file?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      相关资源
      最近更新 更多