有 Java 编程相关的问题?

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

java SpringDataNeo4J::如何在关系中保存数组或枚举?

在我下面的@RelationshipEntity中,你可以看到我有一套Set<Right> rights(权限集)Right是一个Emum。Neo4J只允许我保存一组String,因此我需要一个自定义转换器

@RelationshipEntity (type="LOGIN")
public class Login {

    @GraphId
    Long id;

    @StartNode
    Person person;

    @EndNode
    Organisation organisation;

    @Property
    String role;

    @Property
    @Convert(RightConverter.class)
    Set<Right> rights = new HashSet<Right>();

    public Login() {
        // Empty Constructor
    }

    /* Getters and Setters */

}

这对我来说很有意义,但是当我运行应用程序时,我的RightConverter类出现了一个错误

public class RightConverter implements AttributeConverter<Set<Right>, Set<String>> {
    public Set<String> toGraphProperty(Set<Right>  rights) {
        Set<String> result = new HashSet<>();
        for (Right right : rights) {
            result.add(right.name());
        }
        return result;
    }

    public Set<Right> toEntityAttribute(Set<String> rights) {
        Set<Right> result = new HashSet<>();
        for (String right : rights) {
            result.add(Right.valueOf(right));
        }
        return result;
    }
}

它适用于保存,但不适用于加载:

nested exception is org.neo4j.ogm.metadata.MappingException: Error mapping GraphModel to instance of com.noxgroup.nitro.domain.Person
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set
at com.noxgroup.nitro.domain.converters.RightConverter.toEntityAttribute(RightConverter.java:9) ~[main/:na]

共 (0) 个答案