Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB不能将复杂对象用作Java的键值_Java_Spring_Mongodb_Graph_Spring Data Mongodb - Fatal编程技术网

MongoDB不能将复杂对象用作Java的键值

MongoDB不能将复杂对象用作Java的键值,java,spring,mongodb,graph,spring-data-mongodb,Java,Spring,Mongodb,Graph,Spring Data Mongodb,我正在实现一个表示要存储在MongoDb中的图形的对象。下面是类定义: @Document(collection = "mygraph") public class MyGraph { @Id @JsonSerialize(using = ToStringSerializer.class) public String id; public Map<Instance, Set<Instance>> graph; public Str

我正在实现一个表示要存储在MongoDb中的图形的对象。下面是类定义:

@Document(collection = "mygraph")
public class MyGraph {

    @Id
    @JsonSerialize(using = ToStringSerializer.class)
    public String id;
    public Map<Instance, Set<Instance>> graph;
    public String timestamp;

    /**
     * Add the default constructor
     */
    public MyGraph() {
        this.id = new ObjectId().toHexString();
        this.graph = new LinkedHashMap<>();
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        this.timestamp = dateFormat.format(new Date());
    }

        /**
     * 
     * @param instances
     */
    public MyGraph(Set<Instance> instances) {
        this.id = new ObjectId().toHexString();
        this.graph = new LinkedHashMap<>();
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        this.timestamp = dateFormat.format(new Date());

        /* Initialize the graph */
        for (Instance instance : instances) {
            this.graph.put(instance, new HashSet<>());
        }
    }
    // get and set method are below
} 
@文档(collection=“mygraph”)
公共类MyGraph{
@身份证
@JsonSerialize(使用=ToStringSerializer.class)
公共字符串id;
公共地图;
公共字符串时间戳;
/**
*添加默认构造函数
*/
公共MyGraph(){
this.id=new ObjectId().toHexString();
this.graph=新建LinkedHashMap();
DateFormat DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
this.timestamp=dateFormat.format(new Date());
}
/**
* 
*@param实例
*/
公共MyGraph(集合实例){
this.id=new ObjectId().toHexString();
this.graph=新建LinkedHashMap();
DateFormat DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
this.timestamp=dateFormat.format(new Date());
/*初始化图形*/
例如(实例:实例){
this.graph.put(实例,new HashSet());
}
}
//获取和设置方法如下所示
} 
但是,我得到了以下错误:

Time elapsed: 0.03 sec  <<< FAILURE!
org.springframework.data.mapping.model.MappingException: Cannot use a complex object as a key value.
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeMapInternal(MappingMongoConverter.java:669)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.createMap(MappingMongoConverter.java:585)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:471)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:430)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:418)
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:312)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:418)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:392)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:356)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:79)
    at org.springframework.data.mongodb.core.MongoTemplate.toDbObject(MongoTemplate.java:853)
    at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1014)
    at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:963)
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy197.save(Unknown Source)
    at models.CloudGraphTest.testSaveCloudGraph(CloudGraphTest.java:79)

经过的时间:0.03秒Spring中有一个公开的改进:

不幸的是,目前Spring团队决定不支持它

决定根本不支持它

编辑


有一个与开放相关的问题,可能包括稍后的修复

您的MappingMongoConverter在哪里?你是否已经写了一个,但没有工作?你的CloudGraphTest课程在哪里?