问题标签 [neo4j-ogm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
139 浏览

neo4j - loadAll by ids 加载递归关系时出错

使用新的 Neo4j 2.3 OGM。当尝试通过 id 加载实体时,我遇到了以下问题:

假设(1, "Alex")(2, "Joseph")(3, "Guy")的朋友。(4, "Nati")(5, "Amit")的朋友,使用以下代码:

session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 1)

应该返回 2 个Person对象,Alex 包含两个朋友(Guy,Joseph)和 Nati 包含一个朋友,但它实际返回的是 5 个对象(Alex,Guy,Joseph,Nati,Amit)。尽管 Mike 和 Nati 确实包含了他们的朋友,但我通过两个 id 请求Person并得到一个包含 5 的 Iterable似乎很奇怪(当然也是不受欢迎的)。有谁知道这是为什么?这是一个错误吗?

0 投票
1 回答
860 浏览

neo4j - 在 Neo4j OGM 1.1.3 ogm 深度为 2 中加载对象非常慢

使用 .I查询深度 2 时出现超时。我session.load()正在使用 Neo4j OGM 1.1.3(尝试从 Spring Data Neo4j 3.4 迁移)。尝试加载 Node 对象

连接到我的节点的类别非常受欢迎(20,000 个节点具有相同的类别)并且当我使用运行session.load(Node.class, 1L, 2)时请求超时。是不是它正在尝试查询该类别的所有关系(即使我在 Java 中的模型 Category 忽略了这种关系)?

我希望它加载的内容很简单:

这不是一个非常繁重的请求,不应该超时(除非它正在加载不需要的关系。

有没有办法告诉一个只加载某些关系的深度?

例如,我想加载一棵树的 10 层,但我的树上的其他信息(例如类别、角色,它们不是真正的树节点,而只是代表更多信息)我只想加载它们而没有它们的关系。所以我想加载所有 Node 对象,并且只加载其他没有关系的对象。

更新

发现了两个似乎可以解决这些问题的未解决问题:

https://github.com/neo4j/neo4j-ogm/issues/55

https://github.com/neo4j/neo4j-ogm/issues/70

0 投票
1 回答
104 浏览

neo4j - SDN4中的@Index注解

如果 SDN4 不再管理 Neo4j 索引,为什么会有 @Index 注释?在 SDN3 中,它用于填充数据库中的索引,但现在,考虑到文档,它不是。

0 投票
1 回答
1021 浏览

neo4j - 使用 neo4J OGM 和 cypher 将自引用节点作为父子节点返回

在 Neo4J 数据库中,我有一个实体“Person”,它可以作为 PARENT_OF 或 CHILD_OF 关系与其他人相关

例如,密码查询

将返回一个 id为 p_id的父记录 p和一组子记录 c

在 Java 中,我有一个基类 Person

和2个儿童班

假设合适的 getter 和 setter

我想在 Java 中使用 Neo4J-OGM 并在给定父母 ID 的情况下获得父母。这个父母应该有一个预先加载的孩子列表

所以一个这样的查询案例:

我希望加载父对象及其所有子对象(应填充 List 属性)。

我该怎么做呢?我需要使用密码。

0 投票
2 回答
1058 浏览

neo4j - 如何从 neo4j-ogm 或 spring-data-neo4j 向 Neo4j 中的节点动态添加标签?

当我创建一个节点时,我想向节点添加多个在运行时已知的标签。在 neo4j-ogm 或 spring-data-neo4j 中是否有可能?

0 投票
1 回答
163 浏览

java - 保存关系实体不起作用

我是 Neo4J 的新手,正在使用 Spring 数据存储库。以下是域定义

并且已经GraphRepository为每个实体类定义了下面的代码不保存RelationshipEntity

我必须在课堂上注释roles变量吗? 我必须在保存之前填充集合吗?如果我这样做,则不会保存属性。Actor
rolesActorRole

0 投票
1 回答
249 浏览

neo4j - Neo4j-Ogm 用于动态领域对象模型

我已经开始在我的应用程序中使用 Neo4j-ogm,它就像固定对象域模型的魅力一样。当我知道哪个节点类型连接到具有已知类型的另一个节点时 - 它可以很容易地映射。但是,在我看来,Neo4j 图形数据库的多功能性还在于能够使用非类型化(或动态)域模型,并且我在理解如何使用 Neo4j-ogm 实现它时遇到了概念问题。

让我用一个例子来描述我的问题。

我有域对象,例如:消息和功能。消息可以有多个特征,一个特征可以是许多消息的一部分。用 Neo4j-ogm 映射是完全可以的。

那么如果用户想要将消息与某个 Task 节点类型相关联或将其引用到某个 Contact 节点类型怎么办?在我的应用程序中,可以在各种类型的节点之间拥有大量(但有限)的连接集。所以我希望能够从特定节点获取所有类型的连接,无论这种连接类型或 endNode 类型如何?

当然,我可以使用 cypher 来创建这样的连接:

但是当我开始这样做时 - 我需要一种方法来自己将这个查询的结果与关系实体进行转换。

有没有使用 Neo4j-ogm 的优雅方式来做到这一点。可能有可能创建一个全面的类型层次结构或允许将 Neo4j-ogm 一起用于固定和动态域对象模型的东西。

先感谢您。

0 投票
1 回答
373 浏览

neo4j - 为什么这个 SDN4 查询会抛出“事务已终止”?

我们使用 Spring Data Neo4j 4 和一个非常简单的密码

这个异常经常出现,有时候没问题,有时候会抛出这个异常。为什么交易会终止?

0 投票
1 回答
34 浏览

java - SpringDataNeo4j-4:将实体(拥有的项目)存储在“所有者”类表示策略中的集合中

不幸的是,没有足够的信息,以及演示在 Java 相关实体(如“所有者 - 拥有的项目”)中表示的最佳方式的示例。

我不是在谈论 neo4j 关系方向,而只是在保存此类实体时谈论 java 数据表示和持久性行为。 这里指南谈论持久性深度:

“...另请注意,此行为不依赖于注释上任何配置的关系方向。这是 Java 引用的问题,与数据库中的数据模型无关。”

我想了解在我的数据模型中选择什么策略。所以...

例如,我有一个“任务”类,它可以有许多子任务(相同类型)。任何任务都可以归“项目”所有,并且可以是某个“组件”的成员……尽管如此,任务可以直接归项目所有,并且根本无法与组件链接。

选项1:

这似乎是最合乎逻辑的数据表示。但似乎有缺点:

  • 当创建新任务并调用 template.save(newTask) 时,只有新的任务对象将被持久化并在此任务和项目之间创建关系, - 项目对象应该被提取和更新,新保存的任务作为集合元素。所以,实际上,我们甚至不需要保存单独的 Task 对象。我们可以立即提取 Project 对象,将 Task 添加到集合并更新 Project...这对我来说看起来很奇怪...

  • 当我们创建 Task 对象时,我们可以假设,然后 Project 甚至根本不存在,如果是这样 - 它不会被递归创建,因为 Task 对 Project 一无所知......

选项 2:

该模型允许创建新任务或新组件设置从数据库中提取现有项目(或设置新项目)并将它们都保存......并且我们确定,父对象将像子对象一样被持久化。

缺点:

  • 它看起来像关系数据库中的“FOREIGN_KEY”链接......

  • 我们有多余的“空”属性,例如,如果任务没有与某些项目或组件链接......

所以,我不知道该选择什么 - 两种解决方案都可以工作......但这不是关于工作,而是关于“干净的代码”

0 投票
1 回答
50 浏览

java - SpringDataNeo4j-4:未在嵌套实体上调用 BeforeSaveEvent

调用时遇到嵌套实体问题Neo4jTemplate.save(...)

实际上是的,嵌套实体也被持久化,但BeforeSaveEvent只在父实体上调用。

BeforeSaveEvent中,我为所有实体填充uuidtimeCreated字段。

我不想自己在类构造函数中创建这个值。

所以,我正在考虑以下解决方案:

  • 让它按我的预期工作(一个艰难的)。

  • 甚至不要尝试持久化嵌套实体并以单独的方式持久化所有实体......

  • 创建uuidtimeCreated在类构造函数中

  • 使用外部库(最不可能)

有什么建议吗?