在下面的SELECT 'ALTER SCHEMA NewSchemaName TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];'
+ CHAR(13)+ CHAR(10)+ 'GO '+ CHAR(13)+ CHAR(10)
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'OldSchemaName'
AND (DbObjects.Type IN ('U', 'P', 'V'))
中,您可以看到我有@RelationshipEntity
(一组权利)。 Set<Right> rights
是Right
。 Neo4J只允许我保存一组Emum
,以便我自定义转换器。
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;
}
}
答案 0 :(得分:2)
如果您正在使用SDN 4的最新快照(即发布M1版本),则无需为集合或枚举数组编写转换器。默认的枚举转换器会将枚举集转换为String数组。
但是,如果您使用的是早期版本(M1),则此支持不存在,因此您需要编写转换器。在这种情况下,RightConverter
只需要更改为转换为字符串数组,这是Neo4j最终将使用的,而不是集合。这有效:
public class RightConverter implements AttributeConverter<Set<Right>, String[]> {
public String[] toGraphProperty(Set<Right> rights) {
String[] result = new String[rights.size()];
int i = 0;
for (Right right : rights) {
result[i++] = right.name();
}
return result;
}
public Set<Right> toEntityAttribute(String[] rights) {
Set<Right> result = new HashSet<>();
for (String right : rights) {
result.add(Right.valueOf(right));
}
return result;
}
}