Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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
Spring Boot MongoDB持久性映射异常:无法将Java.util.ArrayList转换为类Java.lang.Object的实例_Java_Mongodb_Spring Boot_Arraylist_Spring Data Mongodb - Fatal编程技术网

Spring Boot MongoDB持久性映射异常:无法将Java.util.ArrayList转换为类Java.lang.Object的实例

Spring Boot MongoDB持久性映射异常:无法将Java.util.ArrayList转换为类Java.lang.Object的实例,java,mongodb,spring-boot,arraylist,spring-data-mongodb,Java,Mongodb,Spring Boot,Arraylist,Spring Data Mongodb,tl;dr 试图将其中的对象可能是ArrayList的ArrayList添加到持久性 尝试添加AttributeConverter>失败 Plz帮助 我不知道我在做什么 我有多蠢 问题 依赖关系 spring boot starter数据jpa 2.0.0 spring boot starter数据mongodb 2.0.0 日食2.7.1我认为你不应该把某个东西映射到某个物体上。在数据库中,您肯定知道阵列中的数据类型,在您的情况下,尝试用以下数据类型替换: @Document(colle

tl;dr

  • 试图将其中的对象可能是ArrayList的ArrayList添加到持久性
  • 尝试添加AttributeConverter>失败
  • Plz帮助
  • 我不知道我在做什么
  • 我有多蠢
问题

依赖关系

  • spring boot starter数据jpa 2.0.0
  • spring boot starter数据mongodb 2.0.0

  • 日食2.7.1我认为你不应该把某个东西映射到某个物体上。在数据库中,您肯定知道阵列中的数据类型,在您的情况下,尝试用以下数据类型替换:

    @Document(collection = "rule_tables")
    public class TableRaw {
    
      @Id
      private String _id;
      private String key;
      private String name;
      private String returns;
      private ArrayList<AxisRaw> axis;
    
      private List<List<Integer>> values; // no initialization.
    }
    
    @文档(collection=“rule\u tables”)
    公共类表格{
    @身份证
    私有字符串_id;
    私钥;
    私有字符串名称;
    私有字符串返回;
    私有阵列列表轴;
    私有列表值;//没有初始化。
    }
    

    这应该可以很好地映射您的结构。

    这就是问题所在,我不知道会出现什么。它可能有一个整数,可能有一个小数128,甚至可能有一个字符串或布尔值。不仅如此,列表中的列表数量应该与轴的数量相同,1到n。(初始化实际上是我的一个错误,我已经删除了它。)查看文档,顺便说一句:您应该在
    WebMVCConfigureAdapter
    中注册转换器。您可以重写该对象的
    addFormatters
    方法。那就应该用了。然而,我并没有尝试过,并且怀疑它可能会以某种奇怪的方式保存您的对象。如果是的话,我最终只是创建了一个带有object value和ArrayList值的对象,并将其中一个字段置为空,这会使事情变得冗长,并在所有地方添加无用的空值,但它是有效的。“无论如何,我都会接受你的回答。”卡洛斯塔瓦雷斯,请你详细解释一下你是如何解决这个问题的?我有同样的problem@user_531我对迟来的答复表示歉意,但我已更新了问题,以说明情况是如何解决的。
    {
      "_id":"5ac20c8b8ee6e6360c8947be",
      "key":"1",
      "name":"Table 1",
      "returns":"Number",
      "axis":[
         {
           "name":"potato",
           "values":[
              {
                 "_id":"BottomEdge","value":0
              },{
                 "_id":"Range",
                  "value":[1,2]
              },{
                 "_id":"TopEdge",
                 "value":3
              }
            ]
          }
       ],
      "values":[
          [1,2,3],
          [1,2,3],
          [1,2,3]
      ],
      "_class":"pt.i2s.gm.gm.rulehandler.tables.model.TableRaw"
    }
    
     org.springframework.data.mapping.MappingException: Cannot convert [1, 2, 3] of type class java.util.ArrayList into an instance of class java.lang.Object! Implement a custom Converter<class java.util.ArrayList, class java.lang.Object> and register it with the CustomConversions. Parent object was: [empty]
    
    @Component
    @Converter(autoApply = true)
    public class ArrayList2ObjectConverter implements 
    AttributeConverter<ArrayList<Object>,Object> {
    
        @Override
        public Object convertToDatabaseColumn(ArrayList<Object> attribute) {
            return attribute;
        }
    
        @SuppressWarnings("unchecked") //If you don't like it suppress it
        @Override
        public ArrayList<Object> convertToEntityAttribute(Object dbData) {
            System.out.println("Converting...");
            return (ArrayList<Object>)dbData;
        }
    
    }
    
    private ArrayList<ValueList> values;
    
    public class ValueList {
      public Object value;
    }
    
    {
      "key":1,
      ...... (Same as above)
      "values": [
           {
             "value": [
                {
                  "value":1
                },
                {
                  "value":2
                }
             ]
           },
           {
             "value": [
                {
                  "value":3
                },
                {
                  "value":4
                }
              ]
           }
        ]
    }
    
    @Document(collection = "rule_tables")
    public class TableRaw {
    
      @Id
      private String _id;
      private String key;
      private String name;
      private String returns;
      private ArrayList<AxisRaw> axis;
    
      private List<List<Integer>> values; // no initialization.
    }