使用MongoRepository防止重复保存

时间:2014-12-17 11:10:18

标签: mongotemplate mongorepository

我有一项服务在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”:“不能使用非当主机不是副本集的成员时,多数'w'模式ACKNOWLEDGED“};嵌套异常是com.mongodb.CommandFailureException:{“serverUsed”:“127.0.0.1:27017”,“ok”:0,“code”:2,“errmsg”:“不能使用非多数'w'模式ACKNOWLEDGED时主机不是副本集“}

的成员

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

尝试使用而不是

<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?