2011-08-20 3 views
6

나는 몇 시간 동안이 일을 해왔으며 아무도 아직 작동하지 않는 사람을 찾지 못했습니다. Mongo에서 BigDecimal 객체를 유지하려고하지만 Mongo는 기본적으로 BigDecimal을 지원하지 않습니다. 나는 봄의 문서 들인 here을 따라 갔지만 행운은 없다.Spring에서 사용자 지정 Mongo 포맷터는 어떻게 설정합니까?

내가 말할 수있는 것부터 Spring이 Mongo에 사용자 정의 변환기 클래스를 삽입 할 때 db에 쓰는 중입니다. 여기에 내가 한 일입니다 :

내 ApplicationContext를-services.xml에 ...

<!-- Factory bean that creates the Mongo instance --> 
    <mongo:mongo 
     host="localhost" 
     port="1234" /> 

    <mongo:db-factory 
     dbname="solar" 
     mongo-ref="mongo"/> 

    <mongo:mapping-converter> 
     <mongo:custom-converters> 
     <mongo:converter> 
      <bean class="com.mine.BigDecimalReadConverter"/> 
     </mongo:converter> 
     <mongo:converter> 
      <bean class="com.mine..BigDecimalWriteConverter"/> 
     </mongo:converter> 
     </mongo:custom-converters> 
    </mongo:mapping-converter> 

    <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> 

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

<bean id="mongoDbTest" 
    class="com.mine.MongoDbTest"> 
    <property name="mongoTemplate"> 
     <ref local="mongoTemplate" /> 
    </property> 
</bean> 

내가지고있어 오류는 다음과 같습니다

java.lang.IllegalArgumentException: Multiple constructors with arguments found in class java.math.BigDecimal! Annotate one with @PreferedConstructor explicitly to select it to be used in persistence operations. 
    at org.springframework.data.mapping.PreferredConstructorDiscoverer.<init>(PreferredConstructorDiscoverer.java:81) 
+0

당신은 스프링 데이터의 단위 테스트 또는 u 사용하는 모듈 보면? – chrislovecnm

+0

나는 그렇지 않다. 나는 문서가 제안한 것처럼 그것을 설정했지만 행운은 없다. – emilebaizel

+0

어떤 버전의 스프링 데이터를 사용하고 있습니까 ?? –

답변

0

어떻게 해결 했는가? 빈을 정의하는 순서가 중요합니다. 그래서 내가 함께 일하고있어 내 app.xml은 다음과 같습니다

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

<bean id="readConverter" class="com.mine.BigDecimalReadConverter"/> 
<bean id="writeConverter" class="com.mine.BigDecimalWriteConverter"/> 

<mongo:mapping-converter id="mappingConverter"> 
    <mongo:custom-converters> 
     <mongo:converter ref="readConverter" /> 
     <mongo:converter ref="writeConverter" /> 
    </mongo:custom-converters> 
</mongo:mapping-converter> 

<!-- Factory bean that creates the Mongo instance --> 
<mongo:mongo 
    host="${${environment}.mongodb.host}" 
    port="${${environment}.mongodb.port}" /> 

<mongo:db-factory 
    dbname="${${environment}.mongodb.databaseName}" 
    mongo-ref="mongo"/> 

<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate"> 
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    <constructor-arg name="mongoConverter" ref="mappingConverter"/> 
</bean> 

<!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

0

이를 사용해보십시오 컨버터 지원 :

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

<bean id="defaultMongoTypeMapper" 
    class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper" lazy-init="true"> 
    <constructor-arg name="typeKey"><null/></constructor-arg> 
</bean> 

<bean id="mappingMongoConverter" 
    class="org.springframework.data.mongodb.core.convert.MappingMongoConverter" lazy-init="true" > 
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    <constructor-arg name="mappingContext" ref="mappingContext" /> 
    <property name="typeMapper" ref="defaultMongoTypeMapper" /> 
</bean> 

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" lazy-init="true"> 
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    <constructor-arg name="mongoConverter" ref="mappingMongoConverter" /> 
</bean> 
관련 문제