Morphia - CodecConfigurationException:找不到类的编解码器 - 但是注册了类

时间:2017-11-23 14:29:03

标签: java mongodb codec bson morphia

我遇到了一个我尚未面对的问题。 我想使用Morphia在MongoDB中存储一个带有嵌入对象的Object。

看起来它完全理解如何对顶级类进行去序列化,而不是嵌入式进程。以下是两个类:

@Embedded
@Getter
@Setter
@ToString
public class HomeLocation extends DatastoreEntity {

    @Id
    private ObjectId id;

    private String homeName;
    @Property("location")
    private Document document;

    public Location getLocation() {
        return deserialize(document);
    }

    public void setLocation(Location location) {
        document = serialize(location);
    }

    private Document serialize(Location location) {
        return new Document("world", location.getWorld())
                .append("x", location.getX())
                .append("y", location.getY())
                .append("z", location.getZ())
                .append("yaw", location.getYaw())
                .append("pitch", location.getPitch());
    }

    private Location deserialize(Document document) {
        return new Location(Bukkit.getWorld((String) get("world")), (double) get("x"), (double) get("y"), (double) get("z"), (float) get("yaw"), (float) get("pitch"));
    }

    private Object get(String key) {
        return document.get(key);
    }

    static {
        datastore.ensureIndexes(HomeLocation.class);
    }

}

var canvas = new fabric.Canvas('c');
var site_url =  'https://instathumbs.com.s3.amazonaws.com/assets/items/Image/Graphics/blueprint.svg?1';
fabric.loadSVGFromURL(site_url, function(objects, options) {
    
    var obj = fabric.util.groupSVGElements(objects, options);
    obj.set({
     left:50,top:50,scaleX:4,scaleY:4
    })
    canvas.add(obj).renderAll();
});

正如您所看到的,通过静态类初始化将两个类添加到Morphia索引中。这适用于HomeLocation.class的所有其他类,它不起作用。

你们有任何想法如何解决这个问题吗? 我还尝试在初始化Morphia时手动将类添加到Morphia索引,但这也不起作用。

我希望你能帮助我。

敬意,

Fabian Schmidt

1 个答案:

答案 0 :(得分:0)

我知道这是一篇旧文章,但是分享我的解决方案希望能对其他人有所帮助。

在您的情况下,您应该更改此设置:

@Property("homes")
@Embedded
private Map<String, List<HomeLocation>> homeLocations;

对此:

@Embedded("homes")
private Map<String, List<HomeLocation>> homeLocations;

并且无需在HomeLocation类的顶部添加@Embedded注释。