【问题标题】:How to map a Neo4j node using embeddable objects?如何使用可嵌入对象映射 Neo4j 节点?
【发布时间】:2016-11-16 05:26:24
【问题描述】:

我问这在 Spring-Data-Neo4j (SDN)Neo4j OGM 中是否可行,因为我知道 SDN 实际上在下面使用 Neo4j-OGM。

假设我有 2 个 Java 对象需要映射到一个单个图形节点:

@NodeEntity
public class User {
    @GraphId
    private Long id;
    private ComplexInfo info;
}
@NodeEntity
public class ComplexInfo {
    @GraphId
    private Long id;
    private Long age;
    private String name;
}

这样,我将在 2 个节点 之间建立关系。 用户ComplexInfo

但是有没有办法将它映射为一个单个节点,其中ComplexInfo的原始变量(包括String和包装对象,如Long、Integer..等) strong> java 对象将被持久化在 User 节点中,并且不会存在 ComplexInfo 节点?

实际上,就好像我以这种方式映射了我的 User 对象:

@NodeEntity
public class User {
    @GraphId
    private Long id;
    private Long age;
    private String name;
}

我不想为此设置 2 个节点,因为 ComplexInfo 类只不过是可重用属性的集合,并且在它与具有此属性的节点之间建立关系没有任何好处属性。

【问题讨论】:

  • 这仅在最新的 OGM - 2.1.0-SNAPSHOT 版本中可用。您可以查看this question 了解更多信息。我希望尽快看到 2.1.0 发布,我也在等待这个改进。

标签: java spring-data-neo4j spring-data-neo4j-4 neo4j-ogm


【解决方案1】:

我在这里假设您在将ComplexInfo嵌入User 类之后。要明确这意味着ComplexInfo不会作为节点出现在数据库中,也不能通过OGM直接查找;它必须始终通过带注释的域对象的组合来访问。

正如@troig 提到的唯一方法是升级到 OGM 的最新快照版本(2.1 GA 将于 12 月 12 日左右推出)。然后,您可以按照 Jasper 的示例 here。使用您的域应该很容易。请记住删除@NodeEntity 注释和ComplexInfo 中的@GraphId Long id 字段。

【讨论】:

猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 2014-11-27
  • 2013-12-08
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
相关资源
最近更新 更多