java - 如何将实体映射到现有图形?

标签 java spring neo4j spring-data-neo4j

我得到了一个由以下 Cypher 表达式描述的图:

CREATE
(BMW:Brand {name: "BMW", country: "Germany"}),
(X3:Model {name: "X3", acceleration: 7.1, maxSpeed: 227.5, displacement: 1997, consumption: 6}),
(lastGen:Generation {from: 2013}),
(xDrive20i:Modification {name: "xDrive20i", maxSpeed: 210, acceleration: 8.3, consumption: 7.9}),
(X3)-[:MODEL_OF]->(BMW),
(BMW)-[:MODEL]->(X3),
(lastGen)-[:GENERATION_OF]->(X3),
(X3)-[:GENERATION]->(lastGen),
(xDrive20i)-[:MODIFICATION_OF]->(X3),
(X3)-[:MODIFICATION]->(xDrive20i),
(lastGen)-[:MODIFICATION]->(xDrive20i),
(xDrive20i)-[:MODIFICATION_OF]->(lastGen);

我描述了一个与 Brand 的数据结构相匹配的 java 类:

@NodeEntity
@TypeAlias("Brand")
public class Brand {

    @GraphId
    private Long id;

    @Indexed(indexType = IndexType.FULLTEXT, indexName = "brand_name")
    private String name;

    private String origin;

    private String owner;

    @RelatedTo(type = "MODEL", direction = Direction.OUTGOING)
    private Set<Model> models;

    //getters and setters are ommited
}

和存储库:

public interface BrandRepository extends GraphRepository<Brand>{

    //method's signatures are ommited

}

当我调用 brandRepository.count() 时,它会如我所料返回 1。但是如果我调用 brandRepository.getOne(2249L) 我会得到一个异常:

java.lang.IllegalStateException: No primary SDN label exists .. (i.e one with starting with __TYPE__)

据我了解阅读 LabelBasedNodeTypeRepresentationStrategy 来源,一个节点必须至少有一个带有 __TYPE__ 前缀的标签。

如果我不能更改图形结构,我该如何将实体映射到图形?

如果没有其他方法,我不介意实现自己的自定义 LabelBasedNodeTypeRepresentationStrategy。但在这种情况下,有人可以让我知道为什么它以这种方式实现(我认为这不是偶然的)以及我应该如何将自定义解决方案绑定(bind)到 spring-data-neo4j 使用它?

我使用 neo4j-2.0.0-M06 和 spring-data-neo4j-3.0.0.M1。

最佳答案

当您存储实体时,SDN 会向您的图表添加额外的元数据,而您的案例中缺少该元数据。

您可以尝试通过调用自己添加该元数据

neo4jTemplate.postEntityCreation(node, Brand.class);

但是,例如,它不会为您的姓名字段编制索引(手动遗留索引)。

关于java - 如何将实体映射到现有图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164451/

相关文章:

javascript - 无法将 Javascript 对象转换为 Java 模型

javascript - 为 D3 Force Directed 格式化 JSON 的最佳方式

java - 组织.postgresql.util.PSQLException : ERROR: null value in column "category_id" violates not-null constraint

java - java从postman中发布的URI获取json数据

java - 如何告诉 eclipse 从 maven repo 读取 javadocs?

java - 为什么 Docker 中的 Gerrit 找不到 JAVA_HOME?

java - Spring OAuth2 刷新 token 在刷新访问 token 后更改

date - Neo4j 中可以操作日期吗?

mysql - 结合图形数据库和 RDBMS

Java-如何使用图像设置 Pane 的背景?