如果我尝试简单的
thingNode.setProperty("uuid", thing.getId());
我得到了
java.util.UUID] is not a supported property value
然而,将128位UUID存储为36个字符的字符串会非常浪费。如果我将UUID拆分为单独的属性
thingNode.setProperty("uuid-begin", thing.getId().getMostSignificantBits());
thingNode.setProperty("uuid-end", thing.getId().getLeastSignificantBits());
它出现I can only create an index on a single property,并且必须以某种方式将UUID的两个位连接成一个属性。如上所述,由于存储空间非常低效,因此不希望使用字符串。有什么想法吗?
答案 0 :(得分:5)
我过去曾使用过以下代码段。因为UUID是"一件事"将它存储到一个属性中是一个好主意。正如您已经提到的,索引总是建立在一个属性上。
final StringBuilder sb = new StringBuilder();
sb.append(Long.toHexString(uuid.getMostSignificantBits()))
.append(Long.toHexString(uuid.getLeastSignificantBits()));
String uuidAsString = sb.toString();
node.setProperty("uuid", uuidAsString);
请注意,有一个现成的解决方案可以管理Neo4j中的uuids:https://github.com/graphaware/neo4j-uuid