Hibernate Neo4j从一个类创建关系

时间:2017-09-20 08:45:38

标签: java hibernate neo4j hibernate-ogm

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

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

此外,如果无法实现这一目标,我将如何连接兄弟姐妹,例如

target.add(this);

什么时候他们都来自同一个班级兄弟姐妹?

2 个答案:

答案 0 :(得分:0)

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

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

执行CYPHER查询可以找到here

答案 1 :(得分:0)

您可以使用与创建不同类实体的关系相同的方式创建与同一类的实体的关系。

您可以在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变得没有意识到这种关系,并且可能会出现问题。