Spring 数据 Neo4j 4 和动态属性
Spring Data Neo4j 4 and dynamic properties
在我的 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
节点,所以我无法在代码中将这些属性定义为单独的Value
.
中的字段
在 SDN 4 中是否有任何机制可以在应用 运行 期间定义这些属性?我需要类似于来自 SDN 3 的 DynamicProperties
的东西。
SDN 4 中没有此类功能,但将通过 Map
上的 @Properties
注释添加到 SDN 5 中。
很快就会在快照版本中进行测试。
查看 this commit 了解更多详情
您可能还想查看对类似问题的回复。
请注意,在那个回答函数中:
public void addAllFields(Class<?> type) {
for (Field field : type.getDeclaredFields()) {
blacklist.add(field.getName());
}
if (type.getSuperclass() != null) {
addAllFields(type.getSuperclass());
}
}
不是防弹的。一方面,它不查看 @属性 注释。所以如果你想沿着这条路走下去,请睁大眼睛。
一个'improvement'是
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();
}
}
但这显然不是寻找方法上的注释...
在我的 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
节点,所以我无法在代码中将这些属性定义为单独的Value
.
在 SDN 4 中是否有任何机制可以在应用 运行 期间定义这些属性?我需要类似于来自 SDN 3 的 DynamicProperties
的东西。
SDN 4 中没有此类功能,但将通过 Map
上的 @Properties
注释添加到 SDN 5 中。
很快就会在快照版本中进行测试。 查看 this commit 了解更多详情
您可能还想查看对类似问题的回复。
请注意,在那个回答函数中:
public void addAllFields(Class<?> type) {
for (Field field : type.getDeclaredFields()) {
blacklist.add(field.getName());
}
if (type.getSuperclass() != null) {
addAllFields(type.getSuperclass());
}
}
不是防弹的。一方面,它不查看 @属性 注释。所以如果你想沿着这条路走下去,请睁大眼睛。
一个'improvement'是
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();
}
}
但这显然不是寻找方法上的注释...