【问题标题】:Hibernate Neo4j create relationships from one classHibernate Neo4j 从一个类创建关系
【发布时间】:2017-09-20 08:45:37
【问题描述】:

我正在尝试使用 Hibernate 来存储家谱信息。从我在documentation 中看到的情况来看,为了连接两个或多个实体,它们必须来自不同的类。所以,为了建立夫妻之间的关系,我需要分别有两个类。我认为这是没有意义的,因为这两个类是相同的(请记住,树可能非常大,所以这样我会有很多重复的类)。

有没有办法拥有一个类,例如 Person 并仅从该类进行连接?

另外,如果没有办法实现这一点,我将如何连接兄弟姐妹,例如

(p:Sibling)-[:SIBLING_OF]->(k:Sibling)

什么时候他们都来自同一个班级?

【问题讨论】:

    标签: java hibernate neo4j hibernate-ogm


    【解决方案1】:

    您可以像与不同类的实体创建关系一样,与同一类的实体创建关系。

    您可以在 Hibernate OGM 项目源中找到映射示例: https://github.com/hibernate/hibernate-ogm/blob/5.2.0.Alpha1/core/src/test/java/org/hibernate/ogm/backendtck/associations/recursive/TreeNode.java

    和真实的测试用例: https://github.com/hibernate/hibernate-ogm/blob/5.2.0.Alpha1/core/src/test/java/org/hibernate/ogm/backendtck/associations/recursive/RecursiveAssociationsTest.java

    测试映射一个树结构,其中的节点有一个父节点和许多子节点,实体的映射如下所示:

    @Entity
    public class TreeNode {
    
        @Id
        private String name;
    
        @ManyToOne
        private TreeNode parent;
    
        @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent",
            cascade = CascadeType.ALL, orphanRemoval = true)
        private List<TreeNode> children = new ArrayList<TreeNode>( 3 );
    
        ...
    }
    

    注意: 根据您的需要,您可以使用本机查询创建关联,但我不建议这样做。 Hibernate OGM 变得不知道这种关系并且可能会出现问题。

    【讨论】:

      【解决方案2】:

      您可以使用 CYPHER 查询为同一类实体创建关系 如下

      Match(u:sibling{name:'abc'}),Match(p:sibling{name:'xyz'})
      CREATE (u)-[:SIBLING_OF]-(p)
      

      执行CYPHER查询可以找到here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多