java - 如何使用 Spring Data Neo4j 将 Map (java.util.Map) 对象保留在 NodeEntity 中?

标签 java neo4j spring-data spring-data-neo4j

我需要保存一个 Map<Object,List<Object>>当我填充包含类时,节点会被保存,但 map 不会。

这是我为实体使用的代码

    @NodeEntity
    public class UserAlias{
        @GraphId
        private Long id;

        @Fetch
        private Map<IdentityType,List<Permission>> aliases;

        private String name;

    }
......
    userAliasRepo.save(userAlias)

IdentityType是一个枚举并且 Permission是另一个未用 @NodeEntity 注释的类和 userAliasRepo延伸GraphRepository <>

那么我如何持久化 map ,我是 Spring Data Neo4j 版本 3.3.0.RELEASE

我想要实现的是将以下 json 与 UserAlias NodeEntity 相关联

{
    "name": "Bond",
    "permissions": {
        "Level5Acess": {
            "READ": false,
            "WRITE": false,
            "CREATE": false,
            "DEL": true
        },
        "Level4Acess": {
            "READ": false,
            "WRITE": false,
            "CREATE": false,
            "DEL": true
        },
        "Level1Acess": {
            "READ": true,
            "WRITE": true,
            "CREATE": true,
            "DEL": true
        },
        "Level0Acess": {
            "READ": true,
            "WRITE": true,
            "CREATE": true,
            "DEL": true
        }
    }
}

最佳答案

按照@frant.hartm 的说明

Other collection types than Set are not supported so far, also currently NO Map>.

但是 org.springframework.data.neo4j.fieldaccess.DynamicProperties 可以用来代替映射到节点属性的映射。唯一的权衡是它只支持原始数据类型及其对应的数组。

@NodeEntity
public class Person {
    @GraphId
    private Long graphId;

    private DynamicProperties personalProperties;
    public void setProperty(String key, Object value) {
        personalProperties.setProperty(key, value);
    }

    public Object getProperty(String key) {
        return personalProperties.getProperty(key);
    }
}
@Test
    public void testCreateOutsideTransaction() {
        Person p = new Person("James", 35);
        p.setProperty("s", "String");
        p.setProperty("x", 100);
        p.setProperty("pi", 3.1415);
        persist(p);
        assertEquals(3, IteratorUtil.count(p.getPersonalProperties().getPropertyKeys()));
        assertProperties(nodeFor(p));
        p.setProperty("s", "String two");
        persist(p);
        assertEquals("String two", nodeFor(p).getProperty("personalProperties-s"));
    }

http://forum.spring.io/forum/spring-projects/data/nosql/117145-spring-data-neo4j-how-to-map-java-util-map-string-string-field

关于java - 如何使用 Spring Data Neo4j 将 Map (java.util.Map) 对象保留在 NodeEntity 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009673/

相关文章:

java - 如何将结果附加到另一个 java 类中的 JTextArea?

java - 将 XML 字符串拆分为属性

java - Spring data neo4j,按日期搜索

scala - Neo4j - Cypher 与 Scala-Neo4j API

java - 如何从存储库中获取一个值,并将该值与表的两个字段进行比较

java - 来自抽象、通用外观的 JPA Controller 类的具体外观

java - 从jsp获取子类:useBean

neo4j - 如何在py2neo中将所有节点连接到neo4j图中的一个节点

spring - 当 Specification 和 Pageable 一起使用时如何禁用计数?

sql - Postgres Spring Data JPA 将列表作为值传递