问题标签 [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.
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似乎很奇怪(当然也是不受欢迎的)。有谁知道这是为什么?这是一个错误吗?
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 对象,并且只加载其他没有关系的对象。
更新
发现了两个似乎可以解决这些问题的未解决问题:
neo4j - SDN4中的@Index注解
如果 SDN4 不再管理 Neo4j 索引,为什么会有 @Index 注释?在 SDN3 中,它用于填充数据库中的索引,但现在,考虑到文档,它不是。
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 属性)。
我该怎么做呢?我需要使用密码。
neo4j - 如何从 neo4j-ogm 或 spring-data-neo4j 向 Neo4j 中的节点动态添加标签?
当我创建一个节点时,我想向节点添加多个在运行时已知的标签。在 neo4j-ogm 或 spring-data-neo4j 中是否有可能?
java - 保存关系实体不起作用
我是 Neo4J 的新手,正在使用 Spring 数据存储库。以下是域定义
并且已经GraphRepository
为每个实体类定义了下面的代码不保存RelationshipEntity
我必须在课堂上注释roles
变量吗?
我必须在保存之前填充集合吗?如果我这样做,则不会保存属性。Actor
roles
Actor
Role
neo4j - Neo4j-Ogm 用于动态领域对象模型
我已经开始在我的应用程序中使用 Neo4j-ogm,它就像固定对象域模型的魅力一样。当我知道哪个节点类型连接到具有已知类型的另一个节点时 - 它可以很容易地映射。但是,在我看来,Neo4j 图形数据库的多功能性还在于能够使用非类型化(或动态)域模型,并且我在理解如何使用 Neo4j-ogm 实现它时遇到了概念问题。
让我用一个例子来描述我的问题。
我有域对象,例如:消息和功能。消息可以有多个特征,一个特征可以是许多消息的一部分。用 Neo4j-ogm 映射是完全可以的。
那么如果用户想要将消息与某个 Task 节点类型相关联或将其引用到某个 Contact 节点类型怎么办?在我的应用程序中,可以在各种类型的节点之间拥有大量(但有限)的连接集。所以我希望能够从特定节点获取所有类型的连接,无论这种连接类型或 endNode 类型如何?
当然,我可以使用 cypher 来创建这样的连接:
但是当我开始这样做时 - 我需要一种方法来自己将这个查询的结果与关系实体进行转换。
有没有使用 Neo4j-ogm 的优雅方式来做到这一点。可能有可能创建一个全面的类型层次结构或允许将 Neo4j-ogm 一起用于固定和动态域对象模型的东西。
先感谢您。
neo4j - 为什么这个 SDN4 查询会抛出“事务已终止”?
我们使用 Spring Data Neo4j 4 和一个非常简单的密码
这个异常经常出现,有时候没问题,有时候会抛出这个异常。为什么交易会终止?
java - SpringDataNeo4j-4:将实体(拥有的项目)存储在“所有者”类表示策略中的集合中
不幸的是,没有足够的信息,以及演示在 Java 相关实体(如“所有者 - 拥有的项目”)中表示的最佳方式的示例。
我不是在谈论 neo4j 关系方向,而只是在保存此类实体时谈论 java 数据表示和持久性行为。 这里指南谈论持久性深度:
“...另请注意,此行为不依赖于注释上任何配置的关系方向。这是 Java 引用的问题,与数据库中的数据模型无关。”
我想了解在我的数据模型中选择什么策略。所以...
例如,我有一个“任务”类,它可以有许多子任务(相同类型)。任何任务都可以归“项目”所有,并且可以是某个“组件”的成员……尽管如此,任务可以直接归项目所有,并且根本无法与组件链接。
选项1:
这似乎是最合乎逻辑的数据表示。但似乎有缺点:
当创建新任务并调用 template.save(newTask) 时,只有新的任务对象将被持久化并在此任务和项目之间创建关系, - 项目对象应该被提取和更新,新保存的任务作为集合元素。所以,实际上,我们甚至不需要保存单独的 Task 对象。我们可以立即提取 Project 对象,将 Task 添加到集合并更新 Project...这对我来说看起来很奇怪...
当我们创建 Task 对象时,我们可以假设,然后 Project 甚至根本不存在,如果是这样 - 它不会被递归创建,因为 Task 对 Project 一无所知......
选项 2:
该模型允许创建新任务或新组件设置从数据库中提取现有项目(或设置新项目)并将它们都保存......并且我们确定,父对象将像子对象一样被持久化。
缺点:
它看起来像关系数据库中的“FOREIGN_KEY”链接......
我们有多余的“空”属性,例如,如果任务没有与某些项目或组件链接......
所以,我不知道该选择什么 - 两种解决方案都可以工作......但这不是关于工作,而是关于“干净的代码”
java - SpringDataNeo4j-4:未在嵌套实体上调用 BeforeSaveEvent
调用时遇到嵌套实体问题Neo4jTemplate.save(...)
。
实际上是的,嵌套实体也被持久化,但BeforeSaveEvent
只在父实体上调用。
在BeforeSaveEvent
中,我为所有实体填充uuid
和timeCreated
字段。
我不想自己在类构造函数中创建这个值。
所以,我正在考虑以下解决方案:
让它按我的预期工作(一个艰难的)。
甚至不要尝试持久化嵌套实体并以单独的方式持久化所有实体......
创建
uuid
并timeCreated
在类构造函数中使用外部库(最不可能)
有什么建议吗?