Hibernate Neo4j 从一个 class 创建关系
Hibernate Neo4j create relationships from one class
我正在尝试使用 Hibernate 来存储家谱信息。从我在 documentation 中看到的情况来看,为了连接两个或多个实体,它们必须来自不同的 classes。所以,为了在夫妻之间建立关系,我需要分别有两个 classes。我认为这是没有意义的,因为两个 classes 是相同的(请记住,树可能非常大,所以我会有很多重复的 classes)。
有没有办法拥有一个 class,例如 Person 并仅从那个 class 建立连接?
此外,如果没有办法实现,我将如何连接兄弟姐妹,例如
(p:Sibling)-[:SIBLING_OF]->(k:Sibling)
他们什么时候会来自同一个 class 兄弟姐妹?
您可以使用 CYPHER 查询为相同的 class 实体创建关系
如下
Match(u:sibling{name:'abc'}),Match(p:sibling{name:'xyz'})
CREATE (u)-[:SIBLING_OF]-(p)
执行CYPHER查询可以找到here
您可以与相同 class 的实体建立关系,就像与不同 class 的实体建立关系一样。
您可以在 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
测试映射一个树结构,节点有一个父节点和许多子节点,实体的映射如下所示:
@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 变得不知道这种关系并且可能会出现问题。
我正在尝试使用 Hibernate 来存储家谱信息。从我在 documentation 中看到的情况来看,为了连接两个或多个实体,它们必须来自不同的 classes。所以,为了在夫妻之间建立关系,我需要分别有两个 classes。我认为这是没有意义的,因为两个 classes 是相同的(请记住,树可能非常大,所以我会有很多重复的 classes)。
有没有办法拥有一个 class,例如 Person 并仅从那个 class 建立连接?
此外,如果没有办法实现,我将如何连接兄弟姐妹,例如
(p:Sibling)-[:SIBLING_OF]->(k:Sibling)
他们什么时候会来自同一个 class 兄弟姐妹?
您可以使用 CYPHER 查询为相同的 class 实体创建关系 如下
Match(u:sibling{name:'abc'}),Match(p:sibling{name:'xyz'})
CREATE (u)-[:SIBLING_OF]-(p)
执行CYPHER查询可以找到here
您可以与相同 class 的实体建立关系,就像与不同 class 的实体建立关系一样。
您可以在 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
测试映射一个树结构,节点有一个父节点和许多子节点,实体的映射如下所示:
@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 变得不知道这种关系并且可能会出现问题。