问题标签 [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 投票
1 回答
53 浏览

neo4j - Spring Data Neo4j 覆盖属性

我尝试编写一个服务,具有update(User)使用 SDN 4.0.0 的功能。该函数应该看起来,数据库中有一个具有相同 id 的用户,如果是,则用新用户覆盖该用户。

有一个UserRepository扩展GraphRepository<User>我写了以下代码:

我现在有一个问题,我更新的每个用户都保持它在数据库中的方式,因为从那一刻起,findOne(id)用户对象的所有属性都会被用户覆盖,就像它在数据库中一样。

我已经解决了这个问题,existsById(Long id)方法是在存储库中添加一个用 Query "Match (n:User) where ID(n)={0}"注释的函数。

但是,我仍然很感兴趣,为什么 SDN 会覆盖与我试图获取的对象具有相同 id 的对象。我假设涉及参考,但我真的看不出它的优点。

0 投票
0 回答
282 浏览

neo4j - Neo4j 和失去的关系

我对 neo4j 有一个非常奇怪的行为。有时,我现在无法重现该问题,两个节点之间的关系丢失了。

例如我有这些节点:

有时当我更改相同的用户属性时,“managed_by”关系会丢失。

我看不到问题......也许UserEntity中没有传入关系?总是需要吗?

谢谢!

更新

简化我修改实体的代码:

有时在调用更新控制器后,我有:

  • 用户实体已修改
  • 未修改工作实体(可能两次调用之间存在异常)
  • managed_by 关系已删除!!!!

更新

几天后问题再次发生,现在我有更多日志

正如您从日志中看到的那样,在“flushing start node of ...”之后,关系“managed_by”被 neo4j 删除。

我希望这些日志可以帮助你找到一个解释!

更新

其他一些日志

保存实体时会出现此问题。实体(POJO)没有对WorkerEntity的引用,所以neo4j为什么说

什么是上下文初始化?

0 投票
0 回答
457 浏览

neo4j - 检索关系丰富的条目时,Spring Data Neo4j-4 性能非常慢

我目前正在使用 SpringDataNeo4j–4.1.0.M1 来处理包含大约 120 万个节点和 1200 万个关系的数据集。图背后的数据结构非常复杂和分层。总共有 79 个 NodeEntities,其中一些可以包含 20 多个 @Relationship 属性。

下面是层次结构的示例

在此处输入图像描述

我的域的一个例子

我的存储库示例

虽然对 Neo4j-Restful-Service 或 Remote-Web-Admin 的查询(对于具有许多关系的对象的特定查询)按预期执行(最大 10-100 毫秒),但使用 SDN 检索条目时查询性能急剧下降(100 - 500 毫秒)。这种性能下降仅在将查询深度设置为 1 时发生。如果查询深度为 0 并且不返回任何关系,则响应速度很快。使用 neo4j 本机 id 执行查询时,会创建索引并且响应时间不会改变。

对于其他用例(例如针对较小对象、@QueryResult 对象或对象集合的特定查询),SDN 表现良好。我的问题特定于检索具有许多关系的对象或具有增加深度(不止一个)的查询的查询。糟糕的性能是复杂的域层次结构和过于丰富的 NodeEntites 的结果,我是否需要减少层次结构以获得更好的性能?

谢谢你的帮助

0 投票
1 回答
199 浏览

java - 使用 neo4j-ogm 2.x (EmbeddedDriver) 配置嵌入式 Neo4j 集群

我正在使用 Spring-data-neo4j 4.1.0.RC1 和 neo4j-ogm-embedded-driver 2.0.1,我正在尝试在 HA 集群模式下配置我的嵌入式数据库(服务器 ID、初始主机、推送因子、. ..)。

有没有办法做到这一点?我无法通过 DriverConfiguration 类来做到这一点。

使用 Spring-data-neo4j 3.x,我能够在 HighAvailableGraphDatabaseFactory 的帮助下覆盖 Neo4jConfiguration.graphDatabase() 方法来配置我自己的 GraphDatabaseService。

谢谢 !

0 投票
0 回答
426 浏览

java - spring-data-neo4j 获取多条路径

我目前正在使用 spring-data-neo4j 来获取两个节点之间的路径。这是存储库:

但是,异常说只有 1 行是 expceted 但 2 found

有关更多信息,如果我将代码更改为:

我可以得到一些未正确映射到域的响应GLNode,例如id缺少节点。

如果我只找到最短路径,例如,

然后一切正常。

那么,将neo4j查询的多个路径映射到java中的单个对象的正确方法是什么?

谢谢。

=============== 更新 ==============

我通过仅获取节点的 id 提出了一个临时解决方案,即

它仅在客户端知道所有图形时才有效。

===================== 更新2 ======================

预计只有 1 行,但实际上使用以下代码抛出了 2 个发现的异常:

这是异常详细信息:

0 投票
1 回答
290 浏览

neo4j - 为什么是 findOne(,) 添加更多相同标签的节点时,性能会变得无法接受吗?

语境

我一直在开发一个由 Neo4j 数据库支持的 Spring Boot 网站。它旨在用作大学课程搜索系统。(相关结构是课程具有模块集,具有模块,与学科相关等......)

对于课程页面,我需要填充课程的所有复杂字段,以便它们可以显示在页面上。我一直在T findOne(Long var1, int var2)通过 GraphRepository 使用深度为 4 的 来获取综合课程对象。我担心我的知识这是一个非常罕见的深度。但是,在运行该方法时,它返回时没有任何明显的延迟。

问题 在做一些压力测试时,我将数据库中的课程数量增加到 4000,发现延迟成倍增加。向后工作深度 2 长达 20 秒,3 大约 60 秒,4 从未返回超过 5 分钟。尽管事实上所有 3 个之前都以毫秒为单位返回。

我发现这很奇怪,因为我正在构建单个课程节点(由长节点 ID 标识),因此课程数量的增加不应该以这种方式改变 findOne 方法的速度。它仍然会构建相同大小的对象。

测试 为了测试替代方案,我跑来MATCH (course:Course{courseCode:'HG65'})-[*1..4]->(x)RETURN *查看需要多长时间(obv 这里的课程代码将查询限制为一个课程节点而不是节点 ID)。它立即返回了我想要的内容:

在此处输入图像描述

这让我认为这可能与结果映射到 GraphRepository 中的 POJO 有关。为了测试这一点,我创建了一些映射函数,用于获取 Neo4jOperation Result 对象并通过解析+迭代的方式实例化/填充我的 Course 对象结果图。从这个意义上说,我将模拟深度为 4 的 findOne。这运行没有延迟。我对此唯一的想法是 findOne 忽略了导致“course1 -> school -> course2”的关系方向,从而导致获取量大幅增加。虽然我现在不知道如何确认,也不知道如何绕过它。

问题

当我添加更多 Course 对象时,为什么 findOne(ID, 4) 运行如此缓慢?每次我想要获取复杂的 POJO 时,如何在不编写定制查询和结果映射器的情况下克服这个问题。

我应该采取其他方法吗?

0 投票
1 回答
232 浏览

neo4j - Neo4j 忽略枚举

使用 Neo4j 我创建了一个 TSUser 对象,该对象的状态显示用户是否处于活动状态。当我在 Neo4j 数据库中创建用户时,状态没有显示,就好像它是瞬态的。但是,当我在代码中加载用户时(调试时),设置了枚举属性。我想在 Neo4j 客户端中看到它。

TSUser看起来像这样:

State存在

在持久化一个 TSUser 之后,我用“MATCH n RETURN n”在客户端获取他并得到如图所示的结果。 无状态用户

0 投票
2 回答
263 浏览

java - Neo4j 野蝇 OGM 。在本地单元测试中工作正常,但在资源异常部署后失败

我的项目结构是

  • 耳朵
    • 服务器战争
    • lib/persistence.jar
    • META-INF/application.xml

我有neo4j-ogm相关的代码persistence jar。我的依赖是

User在包中有一个实体com.abcd.persistence.nodes 并且UserDAO我正在尝试添加这样的用户

如果works fine我在persistence.jar. 但是当我尝试在部署后使用定义的 REST 服务访问时它失败了Server.war

堆栈跟踪是

如果我遗漏任何东西,请告诉我。

0 投票
3 回答
1201 浏览

java - 如何在 neo4j-ogm 中禁用登录

我知道这个问题听起来有点好笑,但是如何禁用 neo4j-ogm 的登录?我已将 logback.xml 文件添加到我的类路径中的 conf 目录中。logback.xml 如下所示:

取自这里。loglevel=off 取自这里

我想为生产部署我的程序,我需要来自控制台的日志。但是对于 neo4j 日志记录,日志文件每天会增加 1GB,其中包含以下类型的日志:

细节:

该程序是一个将控制台记录到 log/log.txt 的 jsvc 守护程序。

neo4j 版本:2.0.0 - M01

java-版本:oracle java 7

0 投票
0 回答
53 浏览

neo4j - 在 Neo4J 中,加载父节点正在加载 id=null 的重复子节点

以下是以A(UserN) 和B(UserRoleN) 作为对象的模型。

在数据库中,以下是图结构:

在加载 A 时,session.load(A.class, id, 1)在 A Object 下总共加载了 2 个 B-Object,其中一个 B 的 ID 为空,另一个 B 对象 ID 是 neo4j 生成的。

无法理解为什么在数据库只有一个 B 对象的情况下会加载重复的 B。