Can you please point me to where I am going wrong with spring mongodb cross store?
18:41:55,094 DEBUG MongoChangeSetPersister:org.springframework.data.m ongodb.crossstore.MongoChangeSetPersister.persistS tate(MongoChangeSetPersister.java:153) - Flush: saving: { "_entity_id" : 958 , "_entity_class" : "com.vidzone.cmswarrior.domain.trevor.Package" , "_entity_field_name" : "test"}
18:41:55,275 DEBUG MongoPersistentEntityIndexCreator:org.springframew ork.data.mongodb.core.index.MongoPersistentEntityI ndexCreator.checkForIndexes(MongoPersistentEntityI ndexCreator.java:98) - Analyzing class class org.apache.log4j.DefaultCategoryFactory for index information.
FAILED CONFIGURATION: @AfterMethod springTestContextAfterTestMethod(public void com.vidzone.cmswarrior.service.integration.trevor. PackageServiceTest.testSave())
org.springframework.data.mapping.model.MappingExce ption: Cannot use a complex object as a key value.
at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.writeMapInternal(MappingMongoCon verter.java:558)
Code:dao.xml <!-- CMS Warrior Entity Manager Factory --> <bean id="cmsWarriorEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:persistenceUnitName="cmsWarriorPersistenceUnit" p:dataSource-ref="cmsWarriorDataSource" p:jpaVendorAdapter-ref="jpaVendorAdapter" p:loadTimeWeaver-ref="loadTimeWeaver"> </bean> <!-- CMS Warrior Transaction Manager --> <bean id="cmsWarriorTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="cmsWarriorEntityManagerFactory" /> <!-- Package scanned for repository candidates --> <jpa:repositories base-package="com.vidzone.cmswarrior.repository" transaction-manager-ref="cmsWarriorTransactionManager" entity-manager-factory-ref="cmsWarriorEntityManagerFactory" factory-class="com.vidzone.common.repository.CustomRepositoryFactoryBean" /> <jpa:auditing set-dates="true" /> <!-- Enabled annotation based configuration --> <context:annotation-config /> <!-- Enabled annotation based transaction management --> <tx:annotation-driven mode="aspectj" transaction-manager="cmsWarriorTransactionManager" /> <bean id="cmsWarriorStatisticsMBean" class="org.hibernate.jmx.StatisticsService" p:statisticsEnabled="true" p:sessionFactory="#{cmsWarriorEntityManagerFactory.sessionFactory}" /> <!-- Mongo aspect config --> <mongo:mapping-converter mongo-ref="mongo" mongo-template-ref="mongoTemplate"/> <bean class="org.springframework.data.mongodb.crossstore.MongoDocumentBacking" factory-method="aspectOf" p:changeSetPersister-ref="mongoChangeSetPersister" /> <bean id="mongoChangeSetPersister" class="org.springframework.data.mongodb.crossstore.MongoChangeSetPersister" p:mongoTemplate-ref="mongoTemplate" p:entityManagerFactory-ref="cmsWarriorEntityManagerFactory" />Code:ds.xml <!-- CMS Warrior data source --> <bean id="cmsWarriorDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:username="${jdbc.username}" p:password="${jdbc.password}" p:url="${jdbc.url}" p:poolPreparedStatements="${jdbc.poolPreparedStatements}" p:initialSize="${jdbc.initialSize}" p:maxActive="${jdbc.maxActive}" p:maxIdle="${jdbc.maxIdle}" p:validationQuery="select 1" p:testWhileIdle="true" /> <!-- Mongo config --> <mongo:db-factory host="localhost" port="27017" dbname="armand-mongo" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> <bean class="org.springframework.data.mongodb.core.MongoExceptionTranslator" />Code:mappings @Entity @Table(name = "Package", schema = "Trevor") @Indexed @NamedNativeQuery(name = "getPackageById", query = "{call Trevor.Package_GetEntityById(:id)}", resultClass = Package.class) public class Package extends AbstractTimeAuditable<Integer> { private static final long serialVersionUID = 2016484828200966769L; @NotNull @Size(min = 2, max = 255) @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) @Column(name = "Name", nullable = false) private String name; @NotNull @Digits(integer = 9, fraction = 0) @Column(name = "CookieExpiryMinutes", nullable = false) private Integer cookieExpiryMinutes; @NotNull @Digits(integer = 9, fraction = 0) @Column(name = "CookieMaximumDailyViews") private Integer cookieMaximumDailyViews; @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "CountryId", nullable = false) private Country country; @RelatedDocument @Transient private Country test; ... @Entity @Table(name = "Country", schema = "dbo") @AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "Id", columnDefinition = "TINYINT")) }) public class Country extends AbstractPersistable<Integer> implements Comparable<Country> { private static final long serialVersionUID = 6904187613247012582L; @Column(name = "Country", nullable = false) private String name; @Column(name = "ISO3166TwoChar", columnDefinition = "char(2)") private String isoCode2; @Column(name = "ISO3166ThreeChar", columnDefinition = "char(3)") private String isoCode3; ...


Reply With Quote