Spring Data Neo4j 4和动态属性

时间:2017-05-23 07:56:06

标签: neo4j spring-data-neo4j-4 neo4j-ogm

在我的Neo4j / SDN 4项目中,我有一个以下实体:

@NodeEntity
public class Value extends BaseEntity {

    @Index(unique = false)
    private Object value;

    private String description;

...

}

在应用程序运行期间,我希望能够向Value节点添加新的动态属性,例如value_en_USvalue_fr_FR

现在我不知道在应用程序运行时将在特定Value节点上添加哪些确切属性,因此我无法在代码中将这些属性定义为{{1}中的单独字段}。

SDN 4是否存在在应用程序运行时定义这些属性的任何机制?我需要与SDN 3中的Value类似的内容。

2 个答案:

答案 0 :(得分:3)

SDN 4中没有此类功能,但它将通过@Properties上的Map注释添加到SDN 5中。

很快就可以在快照版本中进行测试。 查看this commit了解更多详情

答案 1 :(得分:1)

您可能还想查看对类似问题的回复。

https://stackoverflow.com/a/42632709/5249743

请注意在该答案中的功能:

public void addAllFields(Class<?> type) {
    for (Field field : type.getDeclaredFields()) {
        blacklist.add(field.getName());
    }
    if (type.getSuperclass() != null) {
        addAllFields(type.getSuperclass());
    }
}

不是防弹。首先,它没有看@Property注释。因此,如果你想沿着这条路走下去,请睁大眼睛。

'改进'是

public void addAllFields(Class<?> type) {
    for (Field field : type.getDeclaredFields()) {
        blacklist.add(findName(field));
    }
    if (type.getSuperclass() != null) {
        addAllFields(type.getSuperclass());
    }
}

private String findName(Field field) {
    Property property = field.getAnnotation(Property.class);
    if(property == null || "".equals(property.name())) {
        return field.getName();
    } else {
        return property.name();
    }
}

但这显然不会寻找方法的注释......