java - Spring intègre MongoDB et signale une erreur de clé primaire en double basée sur la requête _id de clé primaire
巴扎黑
巴扎黑 2017-05-24 11:35:45
0
1
1182

La requête 1.mongoTemplate.findById(id, clazz, collectionName) basée sur la clé primaire _id rapporte que l'exception imbriquée est java.lang.NoClassDefFoundError : com/mongodb/MongoException$DuplicateKey
2 Le problème est très étrange. Certains _ids peuvent être trouvés, pas de problème. Certaines vérifications _id signaleront l'erreur ci-dessus.
3. Le mongodb utilisé dans la base de données utilise spring pour intégrer mongodb et utilise mongoTemplate pour interroger.
4. Les informations de configuration pertinentes sont les suivantes :
<!-- MONGODB start -->

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <!-- <version>1.10.1.RELEASE</version> -->
        <version>1.4.2.RELEASE</version><!-- <version>1.4.2.RELEASE</version><version>1.7.0.RELEASE</version>-->
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <!--<version>1.13.1.RELEASE</version>  -->
        <version>1.7.2.RELEASE</version><!--<version>1.7.2.RELEASE</version> <version>1.10.0.RELEASE</version> -->
    </dependency>
    <!-- 是否需要待考察 -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons-core</artifactId>
        <version>1.4.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.4.2</version> <!-- <version>3.4.2</version> <version>2.11.3</version>-->
    </dependency>
    <!-- MONGODB end -->

5.<!-- Définissez le nom de la base de données à utiliser-->

<mongo:db-factory id="mongoDbFactory" 
    host="${mongo.host}"
    port="${mongo.port}"
    dbname="${mongo.dbname}"
    username="${mongo.username}"
    password="${mongo.password}"
     /> 

<!-- mongodb的模板 -->  
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>  
    <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
</bean>  

<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
<mongo:mapping-converter base-package="com.xxx.entity" />

<bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />

<!-- 配置mongodb映射类型 -->
<bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mappingContext" ref="mappingContext" />
    <property name="typeMapper" ref="defaultMongoTypeMapper" />
</bean>

<!-- 默认Mongodb类型映射 -->
<bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
    <constructor-arg name="typeKey">
        <null/><!-- 设置为空,可以把 spring data mongodb 多余保存的_class字段去掉 -->
    </constructor-arg>
</bean>

6.@Override

public T findById(Serializable id, String collectionName) {
    return mongoTemplate.findById(id, clazz, collectionName);
}

7. Cette exception imbriquée d'erreur est java.lang.NoClassDefFoundError : com/mongodb/MongoException$DuplicateKey Il n'y a pas de réponse définitive sur Internet. J'espère que quelqu'un connaît la raison ? Ma raison est étrange. Certaines requêtes basées sur l'identifiant ne posent aucun problème. Certains identifiants signalent cette erreur dès qu'ils sont vérifiés. déprimé. . .

巴扎黑
巴扎黑

répondre à tous(1)
洪涛

Je l'ai testé et découvert qu'il y avait un problème avec la version mongo. Passez simplement à une version inférieure. . .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal