有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法实现用于Javers比较的Cutom Comparator

嗨,我是贾维斯的新手

我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较

我的实体:-

包com。戴维恩斯。实体

导入java。util。名单

导入组织。贾维斯。果心元模型。注释。实体

@Entity
public class Ent {

    String value;
    List<String> values;
    public Ent(String value, List<String> values) {
        super();
        this.value = value;
        this.values = values;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public List<String> getValues() {
        return values;
    }
    public void setValues(List<String> values) {
        this.values = values;
    }


}

下面我将注册新的比较国:-

public void comp(){

    Javers javers = JaversBuilder.javers().registerCustomComparator(new FunnyStringComparator(), Ent.class).build();

    Diff diff = javers.compare(new Ent("aaa", new ArrayList<String>()), new Ent("aaa",new ArrayList<String>()));

    System.out.println(diff.getChanges());
}

我的比较执行:-

package com.devyansh.javers;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;

import com.devyansh.entity.Ent;
import com.google.common.collect.Sets; 

import org.javers.core.diff.changetype.PropertyChangeMetadata;
import org.javers.core.diff.changetype.container.ContainerElementChange;
import org.javers.core.diff.changetype.container.SetChange;
import org.javers.core.diff.changetype.container.ValueAdded;
import org.javers.core.diff.changetype.container.ValueRemoved;
import org.javers.core.diff.custom.CustomPropertyComparator;
import org.javers.core.metamodel.property.Property;

public class FunnyStringComparator implements CustomPropertyComparator<Ent, SetChange> {

    @Override
    public Optional<SetChange> compare(Ent left, Ent right, PropertyChangeMetadata metadata,
            Property property) {
        // TODO Auto-generated method stub
        System.out.println("Hello!!!!!");


            return null ;


    }

    @Override
    public boolean equals(Ent a, Ent b) {
        // TODO Auto-generated method stub
        return false;
    }



}

问题领域:-

每当我尝试使用以下行进行比较时:-

Diff-Diff=javers。比较(new-Ent(“aaa”,new-ArrayList()),new-Ent(“aaa”,new-ArrayList())

我得到以下错误:-

托管类映射错误:给定javaClass的类com。戴维恩斯。实体“Ent”映射到CustomType,应为ManagedType

谁能告诉我我做错了什么???我尝试调试Javers api,调用了以下函数:-

JaversType get(Type javaType) {
    return mappedTypes.get(javaType.toString());
}

这里的mappedTypes是一个concurrentHashMap,它为用户定义的实体提供了一个customType

我们如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    目前,仅当CustomTypes对象位于ObjectGraph内时,才支持它们。 当CustomTypes对象直接传递给Javers时。compare(),Javers无法为其生成GlobalId

    我已经为这个案例创建了问题https://github.com/javers/javers/issues/882,欢迎提供意见