问题标签 [spring-data-neo4j-5]

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 投票
0 回答
55 浏览

neo4j - Spring data neo4j:返回路径的查询方法的正确返回类型

我想实现返回不同路径的查询方法:

我很困惑方法 return 是否应该是 Iterable> 如此所述,因为这个问题是在 2 年前发布的:

有谁知道最新版本的SDN是否有不同的方法?

0 投票
1 回答
1335 浏览

spring - 在抽象超类中使用 @Id @GeneratedValue 时的 Neo4j OGM NullPointerException

我正在尝试保存一个继承其 id 注释的域对象@Id @GeneratedValue(strategy = UuidStrategy.class)注释的 id ,但是当我尝试保存时得到 NullPointerException,即使Neo4j OGM 手册指出这是可能的(并且推荐)。(请注意,如果我将 id 移动到非抽象子类,则节点会很高兴地保存)。

代码使用 Spring Boot 2.0.0.M7

编辑#2:如果我现在使抽象类具体化(通过删除 abstract 关键字),则该节点现在填充到数据库中。但是,如果没有abstract 关键字,超类的标签也适用于节点(即节点具有标签Fan、BaseNodeEntity 和BaseEntity)。这可能是该问题的(临时?)解决方法,尽管我不知道将这些额外标签应用于所有节点的影响。(有人知道吗?)或者谁能提供更好的解决方案?

编辑#1我已经将抽象类移动到与其他节点相同的包中,以便正确扫描它们,根据 SessionFactory 的设置(对于包“com.ideafan.server.neo4j.node”)但是我现在得到一个 UnsatisfiedDependencyError 如下:

领域类:

范.java

BaseNodeEntity.java

BaseEntity.java

FanRepository.java

业务逻辑类:

IdeaFanServerApplication.java

DataPopulatorService.java

配置:

AppConfig.java

持久性上下文.java

日志(有错误):

当使用没有 id 的实体时,显然会发生错误当根据 ogm 问题跟踪器上的这个问题

如果我不是将@Id @GeneratedValue id 字段放在抽象超类中,而是将其放在具体子类中,那么节点将毫无问题地写入数据库。

修改域类:

fan.java 包 com.ideafan.server.neo4j.node;

日志(无错误):

任何人都可以看到问题可能是什么?

0 投票
1 回答
190 浏览

neo4j - 更新节点而不首先使用 Neo4j OGM 检索它

我有一个结构,它(简化)如下所示:

现在,当我独立保存两个相关FullEntity对象时,如果我以一种方式进行操作,则一切正常:

但如果我像这样颠倒顺序:

它删除"SomeMoreData2"

0 投票
0 回答
346 浏览

spring-data-neo4j - EnableNeo4jRepositories.sessionFactoryRef 被忽略/什么都不做

我正在尝试使用多个数据源配置 Spring Boot 1.5.9 项目,其中一些是 Neo4j。我使用的 spring-data-neo4j 版本是 4.2.9。

我的目标是为不同的存储库使用不同的 SessionFactory,为每个存储库使用不同的配置类。

我已经让这一切都与 Mongo 一起工作,但似乎即使 sessionFactoryRef 在@EnableNeo4jRepositories 上可用,它也不会被采取行动。

我的配置的缩写版本,具有一般概念:

如前所述,这个结构在 spring-data-mongodb 上工作得很好,但是在 neo4j 中它首先会出现一个错误:

在记录器中打开调试并查看代码将我带到SessionBeanDefinitionRegistrarPostProcessor,其中包含以下用于获取 sessionFactory 的代码:

嗯... bean 的硬编码名称,没有可定制性的迹象。

然后我继续命名我的 bean 两次,@Bean("sessionFactory", NEO4J_SESSIONFACTORY_NAME)所以上面的代码会通过。

应用程序启动了,但问题是存储库与调用的任何 bean 连接在一起sessionFactory,实际上没有使用sessionFactoryRefon 注释。

为了测试这一点,我将注释上的名称更改为不存在的 bean,然后它继续启动(如果我使用 mongo-annotation 执行此操作,应用程序将退出,因为 mongoTemplateRef 中提到的 bean 不可用)。

我挖得更深一点,发现对于 mongo,它检索了此类中的 bean 引用。等效的neo4j 实现没有这样的东西。sessionFactoryRef它当然可以是一个实现细节,但除了注释和 xml-schema 之外,我找不到对该属性的任何引用。

配置类中还有其他地方期望只有一个 SessionFactory 可用。

所以,简而言之,在我看来,它EnableNeo4jRepositories.sessionFactoryRef没有实现,因此 simple 没有做任何事情。因此,对于当前代码,必须存在单个 bean“sessionFactory”,并且所有存储库都将与此 bean 连接,而不管 sessionFactoryRef 的值如何。

有类似经验或知道如何为此提交错误的其他人吗?

0 投票
1 回答
357 浏览

java - 如何将自定义 Spring Data Neo4j 5.0.3 密码查询标记为只读

我目前正在开发一个 Spring Data Neo4j 5.0.3 REST API 应用程序,该应用程序与由 3 个核心节点(1 个领导者和 2 个追随者)组成的 Neo4j 3.3.1 因果集群接口。无论好坏,我们还使用session.queryla SQL 准备语句向数据库提交了许多自定义密码查询。当我们这样做时,我们注意到几乎没有我们通过提交的自定义 Cyphersession.query被发送给任何只读追随者。

我已经破解了代码并注意到在 内Neo4jSession,该query方法总是创建一个类型为 的事务READ_WRITE。有没有办法解决这个问题,以便我们的查询正确分布在我们的集群中?

我也尝试过使用标记适当的方法,@Transactional(readOnly = true)但它似乎不起作用。当我进入Neo4jTransactionManager时,我在第 218 行看到以下内容:

isNewSessionHolder第一个分支中的第二个条件 ,是什么意思?在单个 HTTP API 调用的上下文中,我们至少调用数据库 2 次,所以通过第二次查询,我相信这个条件总是返回 false。

鉴于这些观察结果,是否有任何简单的方法可以使我的查询被视为只读?

0 投票
1 回答
946 浏览

neo4j - Spring Data Neo4j 5 节点/关系标签和继承

我有以下 Spring Data Neo4j 5 实体:

现在Value节点具有以下标签:

在某些情况下,根据我的项目要求,我需要Value使用其他属性扩展节点,例如weightsize.

我不想更改现有的Value类并想引入一个新的 - 继承的,例如:

我有一个问题,以下查询是否还会MATCH(n:Value) RETURN n返回WeightedValue?

是否可以通过以下查询搜索WeightedValue节点(按标签)?Value

MATCH(n:Value) WHERE n.size > 1000 RETURN n

上述方法是否适用于@RelationshipEntity继承?那么是否可以使用继承@RelationshipEntity以及如何为基类和继承类保持相同的标签(例如HAS_VALUE_ON),例如:

0 投票
1 回答
1022 浏览

neo4j - Spring Data Neo4j 动态属性和 Maps 作为值

在我的@RelationshipEntity我定义了以下动态属性:

在不同的Long键下我需要存储Map<String, Object>对象。

万一我只在Map<String, Object>一个键下存储一个对象,一切正常Long,例如在 Neo4j 级别上,以下代码:

转换为以下 Neo4j 属性:

到目前为止一切正常。

但是当我尝试选择这个关系实体时,例如通过以下 Spring Data Neo4j 存储库方法:

它失败了,但有以下例外:

我做错了什么以及如何解决?

0 投票
2 回答
142 浏览

scala - Spring Data Neo4j 5 - 访问资源端点时出现 HttpMessageNotWritableException

为了在 Scala 中重新创建Spring Data Neo4j 官方电影示例,我在 Spring Data Neo4j 层上遇到了 jsonifying 的问题。

README示例项目中记录了详细信息。

启动 Spring 应用程序并点击/movies/<id>会给出以下堆栈跟踪:

018-03-27 15:33:23 WARN DefaultHandlerExceptionResolver:442 - 无法写入 HTTP 消息:org.springframework.http.converter.HttpMessageNotWritableException:无法写入 JSON:movies.Movie 的无效对象 ID 定义:找不到具有名称的属性'ID'; 嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:movies.Movie 的无效对象 ID 定义:找不到名称为“id”的属性(通过参考链:org.springframework.hateoas.PagedResources["_embedded"]->java .util.Collections$UnmodifiableMap["movies"]->java.util.ArrayList[0])

我在这里打开了一个官方的 Spring Data Neo4j JIRA 问题

编辑:在最新评论之后,我从这篇文章中删除了关于根本原因的无关理论。我已经更新了示例项目以Spring Data Rest使用一种方法在图层上公开 ID PostConstruct(感谢@meistermeier)。我也试过这个RepositoryRestConfigurerAdapter方法。然而,原来的HttpMessageNotWritableException仍然存在。有任何想法吗?

更新:在SDN-University 示例Movie.scala之后 建模,我尝试将其用作对象 ID 生成器。我可以成功命中,但唯一的关键是“id”,它只是一个索引,而不是实际的 id。但是,确实返回了 38 部电影,这是电影数据集中的数量。我认为这会将问题缩小到 jsonfying 部分。com.voodoodyne.jackson.jsog.JSOGGenerator/movies/

更新 2: 通过使用创可贴json在控制器中手动形成(使用object-to-map函数和map-to-json函数),我终于能够通过端点发送数据。我已经更新了示例项目来证明这一点。我可以成功地从 中检索对象movieRepository,并随心所欲地操作它们。我认为这显然将问题缩小到了 jsonification。有没有人有一个关于如何正确注释的明确示例(Java 或 Scala NodeEntityJsonIdentifyInfo

0 投票
2 回答
63 浏览

neo4j - Neo4j、SDN5 和对象字段上的索引

我有以下 SDN5 节点实体:

如您所见,我已经定义valueObject并将索引放在它上面。

根据我的应用程序业务逻辑,我将不同的 Java 类型放入Value.valuelike StringLong、等。考虑到这一点,我想知道 Neo4j 索引是否可以在那里有效地工作DoubleInteger那里有意义吗?请解释。

0 投票
0 回答
59 浏览

neo4j - Neo4j SDN5 适当的性能架构设计 - @RelationshipEntity 与 @NodeEntity

我有以下 SDN5 节点实体:

根据我的业务需要,我可以有几十万几十上百个节点。Decision Characteristic

我还需要将每个节点的值放在每个Decision节点Characteristic上。在某些情况下,我可以在相同Decision和 `Characteristic.

我看到了两种可能的实现方式:

1.value属性放入和Decision Characteristic@RelationshipEntity之间,该属性将包含一个数组。DecisionCharacteristic. In case of multiple values(of the same types) between the sameandvalue

2.引入新的Value @NodeEntity并添加两个@RelationshipforDecisionCharacteristic. In case of multiple values(of the same types) between the sameDecision andCharacteristic - 将创建所需数量的单独Value节点。

我最大的标准是对用户需求的实时查询性能——DecisionsCharacteristics.

考虑到这一点——我应该选择什么方式来创建所描述系统的模式——1或者2

我知道@RelationshipEntity不支持模式索引的属性(可以使用 APOC 关系属性手动索引添加此行为的模拟)。另一方面,@NodeEntity支持属性的模式索引,但引入额外的 Value 节点会增加查询期间遍历的关系计数。

此外,如果同一DecisionCharacteristic in case of the solution with@RelationshipEntity property must be represented as array property on@RelationshipEntity` 之间有多个值,我不知道如何在那里索引数组。

请告知如何正确设计此类架构以及选择哪种方式。