在我的Neo4j / SDN 4项目中,我有一个以下实体:
@NodeEntity
public class Value extends BaseEntity {
@Index(unique = false)
private Object value;
private String description;
...
}
在应用程序运行期间,我希望能够向Value
节点添加新的动态属性,例如value_en_US
,value_fr_FR
。
现在我不知道在应用程序运行时将在特定Value
节点上添加哪些确切属性,因此我无法在代码中将这些属性定义为{{1}中的单独字段}。
SDN 4是否存在在应用程序运行时定义这些属性的任何机制?我需要与SDN 3中的Value
类似的内容。
答案 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();
}
}
但这显然不会寻找方法的注释......