问题标签 [spring-data-neo4j-4]
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.
spring-data-neo4j - 如何使用 Neo4jTemplate 合并而不是创建
我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(Part_1 -> Part_2),并且我正在使用 Neo4jTemplate.save() 方法将其保存到数据库中。但是,某些索引具有重复的节点,这些节点将与其他节点有关系(Part_2 -> Part_3)。我的版本目前每次都会创建一个新节点和关系,而不是在节点已经存在时合并。
我读了这篇文章,但我不明白如何实现它,以便两个相同的节点具有相同的 ID。我当前的代码是这样工作的:
- 创建两个节点
- 建立他们的关系
- 向节点添加 relashionship
- 使用 Neo4jTemplate.save() 持久化它
我需要将什么更改为 MERGE 而不是 CREATE?我是否需要在坚持之前进行检查,或者是否有办法在坚持 SDN 4 时进行检查?
编辑:
我决定使用 Neo4jTemplate.query() 方法来编写 Cyper 查询,但是我不知道如何正确创建参数以合并多个节点。我可以像这样为一个节点正确创建一个 MERGE 语句:
Map<String, Object> 参数 = new HashMap<String, Object>();
Map<String, Object> 节点 = new HashMap<String, Object>();node.put("name", "Part_1");
params.put("道具", node_1);
字符串查询 = "MERGE(n1:Part {name:{props}.name})";模板.查询(查询,参数);
我的目标是在两个节点上调用合并,然后再次调用合并以在一个语句中创建关系。我的代码现在看起来像这样:
Map<String, Object> 参数 = new HashMap<String, Object>();
List<Map<String, Object>> 地图;
Map<String, Object> node1 = new HashMap<String, Object>();
Map<String, Object> node2 = new HashMap<String, Object>();node1.put("name1", "Part_1");
node2.put("name2", "Part_2");
地图 = Arrays.asList(node_1, node_2)params.put("道具", 地图);
字符串查询=“合并(n1:Part {name:{props}.name1})
MERGE(n2:Part {name:{props}.name2)
MERGE(n1)-[:CREATED]->(n2)”;模板.查询(查询,参数);
到目前为止,我在参数中看到的所有示例都带有多个节点,只是在调用时迭代整个事物。我还没有找到任何具有参数的示例,您可以在其中指定您所指的某个节点。如何创建引用某个节点的参数?提前致谢!
java - 页面内容的 SDN4 自定义查询分页替代方案
目前 SDN4 不支持分页(参考:Spring Data Neo4j 4 中的分页和排序)
可以自己指定 SKIP 和 LIMIT 子句来检索部分结果,但是对于我们的系统,我们还需要执行自定义分页查询时返回的 Page 的 getTotalPages()、isFirst() 和 isLast() 值。
我们是否有另一种方法可以使用 SDN4 / OGM 检索这些值?或者,是否有任何代码建议/参考可以供我们自己实现(可能在 Page 对象的构造中)?
谢谢!
neo4j - Neo4j:属性数组上的 Cypher 查询
我有一个域类,它有一个名为“alias”的属性,它是一个字符串数组列表,如下所示:
别名包含以下值:{"John Doe","Alex Smith","Greg Walsh"}
我希望能够使用如下所示的存储库查询进行如下查询:“我今天看到了史密斯”并获取数组值输出“亚历克斯史密斯”:
我尝试了一堆不同的查询,如上图所示,但这只有在输入查询与数组值完全匹配时才会匹配。
我想做一个与数组值匹配的输入查询子字符串。
例如:输入查询:“I saw Smith today”输出:“Alex Smith”
neo4j - Neo4j : loadByProperty 正在加载不属于该节点的其他对象
我的结构如下:
一家公司 -> 拥有一组用户 -> 每个用户都有一组政策 -> 每个政策都适用于一家公司。
示例图结构:
公司 (c1) 有两个用户 (u1, u2) 并且策略 (p1) 属于公司 (c1)。“u1”已采取策略(p1)。“u2”没有策略。
当我尝试通过“loadByProperty”方法加载 u2 时,预期应该是 User2 对象和相应的 Company(c1)。
但是,策略(p1)也在加载并设置为“u2”对象。
班级结构;
检索用户的方法:
使用 SDN 4(里程碑版)。
有什么建议么?谢谢是提前。
spring - 使用 Spring Boot 应用程序在 Neo4j.ogm 上的关系问题
在我的项目中,我将 org.neo4j.ogm 与 spring boot 一起使用。当我尝试使用 @RelationshipEntity 创建关系时,意味着它将成功创建。但它不支持多对一关系。
在这里,我在 RELATED_TO_ScTaxonomy 上的关系中创建 Blueprint 与 ScTaxonomy 的关系。我想为 catalogueBlueprint 类添加关系属性。
我的意思是 Blueprint-(RELATED_TO_ScTaxonomy)-ScTaxonomy 与 catalogueBlueprint 类值保存在 RELATED_TO_ScTaxonomy 上。
一旦我重新启动服务,我将创建一个新的连接,这意味着已经创建的关系将丢失,并且只保存新创建的关系。
我正在使用查询
spring - Spring Data Neo4j 中 byId 的派生查询不正确
我有两个实体:用户和连接,以及两个适当的存储库。两个实体都有@GraphId id
字段。连接实体具有User user
字段。
在 ConnectionRepository 接口中,我添加了以下方法:
但它不起作用。它会生成不正确的密码查询。我认为它不正确,因为它包含这样的子句:
这是行不通的,因为id
不是财产。一定是:
这是一个错误吗?无论如何,我怎样才能让它工作?
spring - 如果执行更新,Spring Data Neo4j Repository.save 将无法正常工作
我尝试通过存储库(SDN 4.0.0.RC2)执行以下操作:
- 我
entity
用一个null
有价值的属性保存 - 我
entity
再次保存(即更新它),但现在属性有一个值
在这种情况下,不执行更新。值仍然为空。它是一个错误吗?
neo4j - 如何使用带有 Spring boot GraphRepository 的 Neo4j 获取两个节点之间的关系?
我是 Neo4j 的初学者,我对 Neo4j 图模型有基本的了解。我想知道如何使用 java 和 cyper 查询来获取两个节点之间的关系。我有两个实体,例如关注用户和角色。我想检索用户的角色。我有运行良好的 cyper 查询。当我尝试通过 neo4j 实体类时,我遗漏了一些东西。请看下面的代码片段,
用户实体类:
角色实体类:
任何人都可以帮我了解获取针对用户的角色吗?
TIA..,