I'm using Java+Spring+MongoTemplate+MongoDB. If I wanna to insert object into my MongoDB then I've got error:
java.lang.IllegalArgumentException: can't serialize class java.lang.Class
Here is my mongo-context.xml:
<mongo:mongo id="mongoLocal" host="${local.mongo.host}" port="${local.mongo.port}">
<mongo:options
connections-per-host="700"
threads-allowed-to-block-for-connection-multiplier="100"
connect-timeout="15000"
auto-connect-retry="true"
socket-timeout="60000"
write-number="1"/>
</mongo:mongo>
<mongo:db-factory id="mongoDbFactoryLocal" dbname="${local.mongo.db}" mongo-ref="mongoLocal"/>
<bean id="mongoConverterLocal" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg index="0" ref="mongoDbFactoryLocal" />
<constructor-arg index="1">
<bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
</constructor-arg>
<property name="mapKeyDotReplacement" value="\+"/>
</bean>
<bean id="mongoTemplateLocal" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactoryLocal"/>
<constructor-arg name="mongoConverter" ref="mongoConverterLocal"/>
</bean>
mongo-context.xml I imported to spring-context.xml and use it like:
<bean id="statusDao" class="com.status.StatusDAOImpl">
</bean>
<bean id="BasicDAO" class="com.status.PreparableDAO">
<property name="daos">
<list>
<ref bean="statusDao"/>
</list>
</property>
<property name="template" ref="mongoTemplateLocal"/>
</bean>
And finally class (SimpleMessage) that I'm trying to insert into Mongo:
public abstract class Message implements Serializable {
@Id
private String id;
public Message() {super();}
public Message(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
and
@Document
public class SimpleMessage extends Message {
private Date arriveDateTime;
public SimpleMessage() {
super("unknown");
this.arriveDateTime = new Date();
}
public SimpleMessage(String id) {
super(id);
this.arriveDateTime = new Date();
}
public Date getArriveDateTime() {
return arriveDateTime;
}
public void setArriveDateTime(Date arriveDateTime) {
this.arriveDateTime = arriveDateTime;
}
@Override
public String toString() {
return new StringBuffer("EmlFile: [")
.append("id: ")
.append(getId())
.append("; date: ")
.append(arriveDateTime)
.append("]")
.toString();
}
@Override
public int hashCode() {
int hash = ThreadLocalRandom.current().nextInt(1000);
hash = hash * 31 + (getId() == null ?
"".hashCode() : getId().hashCode());
hash = hash
+ (arriveDateTime == null ? 0 : arriveDateTime.hashCode());
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof EmlMessage))
return false;
SimpleMessage otherA = (SimpleMessage) obj;
return getId().equals(otherA.getId());
}
}
Any idea? I know that I can extends BasicDBObject, but why I need to do it if I implemented MongoMappingConverter.
Aucun commentaire:
Enregistrer un commentaire