Spring Boot MongoDB持久性映射异常:无法将Java.util.ArrayList转换为类Java.lang.Object的实例
tl;drSpring 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
- 试图将其中的对象可能是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
方法。那就应该用了。然而,我并没有尝试过,并且怀疑它可能会以某种奇怪的方式保存您的对象。如果是的话,我最终只是创建了一个带有object value和ArrayList值的对象,并将其中一个字段置为空,这会使事情变得冗长,并在所有地方添加无用的空值,但它是有效的。“无论如何,我都会接受你的回答。”卡洛斯塔瓦雷斯,请你详细解释一下你是如何解决这个问题的?我有同样的problem@user_531我对迟来的答复表示歉意,但我已更新了问题,以说明情况是如何解决的。addFormatters
{ "_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. }