java.lang.String 无法转换为 com.orientechnologies.orient.core.db.record.OIdentifying

标签 java orientdb

当我尝试保存带有 map 字段的简单 POJO 时,出现以下异常。

线程“main”中的异常 java.lang.ClassCastException:java.lang.String 无法转换为 com.orientechnologies.orient.core.db.record.OIdentific

这是我的代码:

package com.example.test;

import com.orientechnologies.orient.client.remote.OServerAdmin;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.object.db.OObjectDatabaseTx;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Main {

    static class Entity {

        private Map map;

        public Entity() {
        }

        public Entity(Map map) {
            this.map = map;
        }

        public Map getMap() {
            return map;
        }

        public void setMap(Map map) {
            this.map = map;
        }
    }

    private static void doIt() {
        String dbUser = "root";
        String dbPass = "root";
        String dbUrl = "remote:localhost:2424/sandbox";
        try {
            OServerAdmin serverAdmin = new OServerAdmin(dbUrl);
            serverAdmin.connect(dbUser, dbPass);
            if (serverAdmin.existsDatabase("plocal")) {
                serverAdmin.dropDatabase("plocal");
            }
            serverAdmin.createDatabase("document", "plocal");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        ODatabaseDocumentTx databaseDocumentTx = new ODatabaseDocumentTx(dbUrl);
        databaseDocumentTx.open(dbUser, dbPass);

        OObjectDatabaseTx objectDatabaseTx = new OObjectDatabaseTx(databaseDocumentTx);
        objectDatabaseTx.getEntityManager().registerEntityClass(Entity.class);

        Map map = new HashMap();
        map.put("a", "a");
        Entity entity = objectDatabaseTx.save(new Entity(map)); //<-- EXCEPTION THROWN HERE!!!
    }

    public static void main(String[] args) {
        doIt();
    }

}

完整堆栈跟踪:


    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.orientechnologies.orient.core.db.record.OIdentifiable
        at com.orientechnologies.orient.core.db.record.ORecordLazyMap.put(ORecordLazyMap.java:41)
        at com.orientechnologies.orient.object.enhancement.OObjectEntitySerializer.multiValueToStream(OObjectEntitySerializer.java:1398)
        at com.orientechnologies.orient.object.enhancement.OObjectEntitySerializer.typeToStream(OObjectEntitySerializer.java:805)
        at com.orientechnologies.orient.object.enhancement.OObjectEntitySerializer.toStream(OObjectEntitySerializer.java:1216)
        at com.orientechnologies.orient.object.enhancement.OObjectEntitySerializer.serializeObject(OObjectEntitySerializer.java:144)
        at com.orientechnologies.orient.object.db.OObjectDatabaseTx.save(OObjectDatabaseTx.java:454)
        at com.orientechnologies.orient.object.db.OObjectDatabaseTx.save(OObjectDatabaseTx.java:399)
        at com.example.test.Main.doIt(Main.java:56)
        at com.example.test.Main.main(Main.java:60)
        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:497)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)


任何有关正在发生的事情的指导将不胜感激!

最佳答案

我已经使用了这段代码并且它有效

import com.orientechnologies.orient.client.remote.OServerAdmin;
import com.orientechnologies.orient.object.db.OObjectDatabaseTx;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Main {

    static class Entity {

        private Map<String,Object> map;

        public Entity() {
            this.map=null;
        }

        public Entity(Map<String,Object> map) {
            this.map = map;
        }

        public Map<String,Object> getMap() {
            return map;
        }

        public void setMap(Map<String,Object> map) {
            this.map = map;
        }
    }

    private static void doIt() {
        String dbUser = "root";
        String dbPass = "root";
        String dbUrl = "remote:localhost:2424/sandbox";
        try {
            OServerAdmin serverAdmin = new OServerAdmin(dbUrl);
            serverAdmin.connect(dbUser, dbPass);
            if (serverAdmin.existsDatabase("plocal")) {
                serverAdmin.dropDatabase("plocal");
                System.out.println("Db cancellalto");
            }
            //serverAdmin.createDatabase("document", "plocal");
            serverAdmin.createDatabase("sandbox", "object", "plocal");
            System.out.println("Db creato");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

        OObjectDatabaseTx objectDatabaseTx = new OObjectDatabaseTx(dbUrl);
        objectDatabaseTx.open(dbUser,dbPass);
        objectDatabaseTx.getEntityManager().registerEntityClass(Entity.class);


        Entity e = objectDatabaseTx.newInstance(Entity.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("a", "a");
        e.setMap(map);

        // Save the entity
        e = objectDatabaseTx.save(e);

    }

    public static void main(String[] args) {
        doIt();
    }

}

enter image description here

希望对你有帮助

关于java.lang.String 无法转换为 com.orientechnologies.orient.core.db.record.OIdentifying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38881994/

相关文章:

java - 如何调试在 Java 7 下工作但在 Java 8 下不工作的东西

java - 当我按下 GUI 上的按钮时,如何存储按钮的值?

java - (Java) 如何让数据库删除存储的值,直到该值已存储超过 5 次?

java - OrientDB:如何删除特定的轻量级边缘?

java - Neo4j中的Lucene在可靠的搜索查询方面存在一些错误-与OrientDB相比

orientdb - 创建记录后是否可以更新 OrientDB 中记录的类?

java - 有效地从 ArrayList 中获取子列表

java.lang.OutOfMemoryError : Java heap space exception 错误

java - 如何从 OrientDB 检索轻量级边缘

java - 东方数据库 : OrientEdge vs OrientEdgeType and OrientVertex vs OrientVertexType