问题标签 [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.
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;
日志(无错误):
任何人都可以看到问题可能是什么?
neo4j - 更新节点而不首先使用 Neo4j OGM 检索它
我有一个结构,它(简化)如下所示:
现在,当我独立保存两个相关FullEntity
对象时,如果我以一种方式进行操作,则一切正常:
但如果我像这样颠倒顺序:
它删除"SomeMoreData2"
。
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
,实际上没有使用sessionFactoryRef
on 注释。
为了测试这一点,我将注释上的名称更改为不存在的 bean,然后它继续启动(如果我使用 mongo-annotation 执行此操作,应用程序将退出,因为 mongoTemplateRef 中提到的 bean 不可用)。
我挖得更深一点,发现对于 mongo,它检索了此类中的 bean 引用。等效的neo4j 实现没有这样的东西。sessionFactoryRef
它当然可以是一个实现细节,但除了注释和 xml-schema 之外,我找不到对该属性的任何引用。
配置类中还有其他地方期望只有一个 SessionFactory 可用。
所以,简而言之,在我看来,它EnableNeo4jRepositories.sessionFactoryRef
没有实现,因此 simple 没有做任何事情。因此,对于当前代码,必须存在单个 bean“sessionFactory”,并且所有存储库都将与此 bean 连接,而不管 sessionFactoryRef 的值如何。
有类似经验或知道如何为此提交错误的其他人吗?
java - 如何将自定义 Spring Data Neo4j 5.0.3 密码查询标记为只读
我目前正在开发一个 Spring Data Neo4j 5.0.3 REST API 应用程序,该应用程序与由 3 个核心节点(1 个领导者和 2 个追随者)组成的 Neo4j 3.3.1 因果集群接口。无论好坏,我们还使用session.query
la SQL 准备语句向数据库提交了许多自定义密码查询。当我们这样做时,我们注意到几乎没有我们通过提交的自定义 Cyphersession.query
被发送给任何只读追随者。
我已经破解了代码并注意到在 内Neo4jSession
,该query
方法总是创建一个类型为 的事务READ_WRITE
。有没有办法解决这个问题,以便我们的查询正确分布在我们的集群中?
我也尝试过使用标记适当的方法,@Transactional(readOnly = true)
但它似乎不起作用。当我进入Neo4jTransactionManager
时,我在第 218 行看到以下内容:
isNewSessionHolder
第一个分支中的第二个条件 ,是什么意思?在单个 HTTP API 调用的上下文中,我们至少调用数据库 2 次,所以通过第二次查询,我相信这个条件总是返回 false。
鉴于这些观察结果,是否有任何简单的方法可以使我的查询被视为只读?
neo4j - Spring Data Neo4j 5 节点/关系标签和继承
我有以下 Spring Data Neo4j 5 实体:
现在Value
节点具有以下标签:
在某些情况下,根据我的项目要求,我需要Value
使用其他属性扩展节点,例如weight
和size
.
我不想更改现有的Value
类并想引入一个新的 - 继承的,例如:
我有一个问题,以下查询是否还会MATCH(n:Value) RETURN n
返回WeightedValue
?
是否可以通过以下查询搜索WeightedValue
节点(按标签)?Value
MATCH(n:Value) WHERE n.size > 1000 RETURN n
上述方法是否适用于@RelationshipEntity
继承?那么是否可以使用继承@RelationshipEntity
以及如何为基类和继承类保持相同的标签(例如HAS_VALUE_ON
),例如:
neo4j - Spring Data Neo4j 动态属性和 Maps 作为值
在我的@RelationshipEntity
我定义了以下动态属性:
在不同的Long
键下我需要存储Map<String, Object>
对象。
万一我只在Map<String, Object>
一个键下存储一个对象,一切正常Long
,例如在 Neo4j 级别上,以下代码:
转换为以下 Neo4j 属性:
到目前为止一切正常。
但是当我尝试选择这个关系实体时,例如通过以下 Spring Data Neo4j 存储库方法:
它失败了,但有以下例外:
我做错了什么以及如何解决?
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 NodeEntity
)JsonIdentifyInfo
?
neo4j - Neo4j、SDN5 和对象字段上的索引
我有以下 SDN5 节点实体:
如您所见,我已经定义value
为Object
并将索引放在它上面。
根据我的应用程序业务逻辑,我将不同的 Java 类型放入Value.value
like String
、Long
、等。考虑到这一点,我想知道 Neo4j 索引是否可以在那里有效地工作Double
?Integer
那里有意义吗?请解释。
neo4j - Neo4j SDN5 适当的性能架构设计 - @RelationshipEntity 与 @NodeEntity
我有以下 SDN5 节点实体:
根据我的业务需要,我可以有几十万和几十上百个节点。Decision
Characteristic
我还需要将每个节点的值放在每个Decision
节点Characteristic
上。在某些情况下,我可以在相同Decision
和 `Characteristic.
我看到了两种可能的实现方式:
1.将value
属性放入和Decision Characteristic@RelationshipEntity
之间,该属性将包含一个数组。Decision
Characteristic. In case of multiple values(of the same types) between the same
and
value
2.引入新的Value
@NodeEntity
并添加两个@Relationship
forDecision
和Characteristic. In case of multiple values(of the same types) between the same
Decision and
Characteristic - 将创建所需数量的单独Value
节点。
我最大的标准是对用户需求的实时查询性能——Decisions
按Characteristics
.
考虑到这一点——我应该选择什么方式来创建所描述系统的模式——1
或者2
?
我知道@RelationshipEntity
不支持模式索引的属性(可以使用 APOC 关系属性手动索引添加此行为的模拟)。另一方面,@NodeEntity
支持属性的模式索引,但引入额外的 Value 节点会增加查询期间遍历的关系计数。
此外,如果同一Decision
和Characteristic in case of the solution with
@RelationshipEntity property must be represented as array property on
@RelationshipEntity` 之间有多个值,我不知道如何在那里索引数组。
请告知如何正确设计此类架构以及选择哪种方式。