2011-08-20 12 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

どのバージョンのSpringデータを使用していますか? –

答えて

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> 
関連する問題