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

spring-data - 为 Neo4j Spring Boot JPA 使用自定义 AttributeConverter 时获取 Neo.ClientError.Statement.TypeError

我有一个使用 Spring Data Neo4j (v5.0.0RC2)、Neo4j (v3.2.1) 和 Neo4j OGM (v3.0.0) 运行的 Kotlin (v1.1.4) Spring Boot (v2.0.0.BUILD-SNAPSHOT) 应用程序。

尝试将自定义 JPA@Query与具有自定义AttributeConverter.

堆栈跟踪:

这是我的转换器:

我在这里有一个关系实体:

我的 JPA 查询如下:

在线查看 Neo4j 参考的 Spring Data,看起来我已经准备好了一切。OGM 正确地看到了转换器(我能够调试并看到companion object类的静态内部正在创建/命中。

所以,我假设 Spring Data 可能需要了解转换器。因此,根据文档,我ConversionService在我的 spring 配置中添加了一个。

这确实java.util.Date像 Spring Data Neo4j 文档所说的那样工作,它应该(它的自动配置)在这里说明:http: //docs.spring.io/spring-data/neo4j/docs/4.0.0.RELEASE/reference/html/#参考编程模型转换

有没有人有任何建议可以尝试或为什么会发生这种情况?

0 投票
1 回答
443 浏览

neo4j - 弹簧数据 | 新4J | 以正确的顺序查询路径

版本:

这是我的实体:

我正在尝试获取 A 和 D 之间的路线,我需要以正确的顺序将结果作为 A、B、C 和 D,然后我将在每个对象中获取总线。

这是我的密码:

但结果的顺序不正确。我将结果视为 D、C、A、B(或某种随机顺序),而不是 A、B、C、D。

我能想到的一种方法是向 OperatedByBus 添加一个属性,例如 int legId,然后在我的查询中按 legId 排序。不确定这是否是最好的方法。

有什么我想念的吗?

0 投票
1 回答
51 浏览

java - 从接口的导入类中获取值

环境

我通过以下方式从我的 Java 项目中导入一个类

然后我尝试通过扩展 Neo4jRepository 为存储库创建一个接口。

我正在关注这些文档:“参数类型从更改<T><T, ID>” - https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/

ActionResponse 扩展 NamedType 扩展 GraphType 具有

问题

这: extends Neo4jRepository<ActionResponse, ActionResponse.getId() >是不正确的语法。

如何使用 ActionReponse 类中的 id 填充第二个参数字段?

0 投票
1 回答
105 浏览

neo4j - Spring Data Neo4j 5 OGM 3 和 Spring Boot 2.0.0.M4

我正在尝试从迁移SDN 4.2SDN 5OGM 3

除了一种情况外,一切几乎都完美无缺。

现在为了保存实体,我必须使用 depth=2 而不是 depth=1 就像在 SDN 4.2

那里很难解释,所以我在 GitHub 上创建了一个演示项目来重现这个问题 - https://github.com/Artgit/spring-boot-2.0.0.M4-sdn5-ogm3-saving-issue

重现步骤:

如果您想使用自己的 Neo4j 实例,请跳过第 1 步并从第 2 步开始阅读。

  1. 运行mvn docker:start -Dfile.encoding=UTF-8以在 Docker 容器中启动 Neo4j 3.2.5(必须安装 Docker)

  2. 执行测试com.decisionwanted.domain.DecisionCharacteristicIT.testUpdateValue()

测试应该失败并断言:

从以下代码可以看出:

我已经rdbmsHorScalingValue用 user3 更新了,并且在Value通过 id 获取之后(valueDao.getById())我希望这个用户是,rdbmsHorScalingValue.getUpdateUser()但由于某种未知的原因,这是不正确的。

但是,如果我们更改以下方法:从tocom.decisionwanted.domain.dao.decision.characteristic.value.history.HistoryValueDaoImpl.create(Value)保存深度- 一切都开始正常工作。12

现在我不知道问题出在哪里,我唯一知道的是 - 使用 SDN 4.2 保存深度 = 1 时效果很好。

请告诉我问题出在哪里(为什么它不适用于 SDN 5)以及如何解决它。

0 投票
1 回答
299 浏览

spring - 当我从 spring data neo4j 4.1.3 切换到 5.0.0 时,SpringBoot 现在失败

背景

我有一个带有 spring data neo4j 的应用程序,我从 4.1.3 切换到 5.0.0。

我相信我已经进行了所有必要的更改来转换我的代码,但我仍然遇到错误。

我当前版本的 spring boot 是

问题

当我运行时:mvn spring-boot:run在命令行中,

我收到一个错误:

我的 myproject.Application.java 目前是

这没有找到我的任何控制器,例如 myproject.controller.ActionController.java 包含

尝试#1

如果我将注释添加@ComponentScan({"myproject.request"})到我的 Application 类中,错误就会消失,但 spring boot 无法加载任何控制器,因此我的 Swagger 显示没有 API 并且没有运行控制器。这不是解决方案。@SpringBootApplication应该照顾这一切。

问题

如何重新配置​​ spring boot 以开始像在 spring data neo4j 版本 4.1.3 中那样工作?

更新 1 尝试 #2

我尝试将此注释添加到我的class Application

错误变成了不太干净的东西:

更新 2

为了尝试使用@EnableNeo4jRepositories("myproject.repository")并绕过更新 1 中的错误,我尝试了:

mvn clean install spring-boot:repackage

它给了一个构建成功,但同样的错误仍然存​​在:

更新 3

我有新的注释并将我的 pom 从:

现在mvn spring-boot:run

给出错误:

0 投票
1 回答
173 浏览

neo4j - SDN5/OGM3 在 Cypher 查询中比较 java.util.Date

我有以下实体:

我需要获取Action在前一段时间创建的最后一个。

为了做到这一点,我实现了以下存储库方法:

我使用下面的代码来测试这个方法:

但是如果没有这部分 Cypher 查询AND a.createDate <= {minCreateDate},我可以成功找到Action实例。

在 Neo4j 级别,我的数据如下所示:

我做错了什么以及如何正确地将日期与 SDN/OGM 和 Cypher 进行比较?

另外,有没有办法告诉 SDN/OGM 将java.util.Date对象存储为long毫秒和String

0 投票
1 回答
650 浏览

spring-boot - Neo4j 无法将 java.lang.Long 字段 model.Authority.id 设置为 model.Authority

我试图让 Neo4j 工作,但是当我试图获取一个实体或坚持一个实体时,我最终得到了这个错误,并且无法弄清楚。

原因:java.lang.IllegalArgumentException:无法将 java.lang.Long 字段 com.mycompany.mbi.dom.Authority.id 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl. java:167) ~[na:1.8.0_131] 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_131] 在 sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58) ~[na:1.8.0_131] 在 sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) ~[na:1.8.0_131] 在 java.lang.reflect.Field.get(Field.java:393) ~[ na:1.8.0_131] 在 org.neo4j.ogm.metadata.FieldInfo.read(FieldInfo.java:373) ~[neo4j-ogm-core-3.0.0-RC1.jar:na] 在 org.neo4j.ogm。 metadata.FieldInfo.readProperty(FieldInfo.java:432)〜[neo4j-ogm-core-3.0.0-RC1.jar:na]在org.neo4j.ogm.utils.EntityUtils.identity(EntityUtils.java:36)〜[neo4j-ogm-core-3.0.0 -RC1.jar:na] at org.neo4j.ogm.context.EntityGraphMapper.mapEntity(EntityGraphMapper.java:211) ~[neo4j-ogm-core-3.0.0-RC1.jar:na] at org.neo4j.ogm .context.EntityGraphMapper.map(EntityGraphMapper.java:132) ~[neo4j-ogm-core-3.0.0-RC1.jar:na] at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java: 79) ~[neo4j-ogm-core-3.0.0-RC1.jar:na] 在 org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:41) ~[neo4j-ogm-core-3.0 .0-RC1.jar:na] 在 org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:451) ~[neo4j-ogm-core-3.0.0-RC1.jar:na] 在 sun.reflect .NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131] 在 sun.reflect.NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62)~[na:1.8.0_131] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_131] at java.lang.reflect.Method.invoke( Method.java:498) ~[na:1.8.0_131] at org.springframework.data.neo4j.transaction.SharedSessionCreator$SharedSessionInvocationHandler.invoke(SharedSessionCreator.java:131) ~[spring-data-neo4j-5.0.0.RC2 .jar:na] at com.sun.proxy.$Proxy95.save(Unknown Source) ~[na:na] at org.springframework.data.neo4j.repository.support.SimpleNeo4jRepository.save(SimpleNeo4jRepository.java:73) ~ [spring-data-neo4j-5.0.0.RC2.jar:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 62)〜[na:1.8.0_131]在sun.reflect。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_131] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131] at org.springframework.data。 repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:377) ~[spring-data-commons-2.0.0.RC2.jar:na] at org.springframework.data.repository.core.support.RepositoryComposition .invoke(RepositoryComposition.java:200) ~[spring-data-commons-2.0.0.RC2.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java: 604)~[spring-data-commons-2.0.0.RC2.jar:na] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)~[spring-aop-5.0.0.RC3 .jar:5.0.0。RC3] 在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:568) ~[spring-data-commons-2.0.0.RC2.jar:na] 在 org.springframework。 data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:549) ~[spring-data-commons-2.0.0.RC2.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:185)~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:60)~[spring- data-commons-2.0.0.RC2.jar:na] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)~[spring-tx-5.0.0 .RC3.jar:5.0.0.RC3] 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.0.0.RC3.jar:5.0.0.RC3]在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor。调用(PersistenceExceptionTranslationInterceptor.java:139)~[spring-tx-5.0.0.RC3.jar:5.0.0.RC3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)~[spring -aop-5.0.0.RC3.jar:5.0.0。RC3] 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] 在 org.springframework.aop.framework。 ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java :61) ~[spring-data-commons-2.0.0.RC2.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.0. RC3.jar:5.0.0.RC3] 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.0.0.RC3.jar:5.0.0.RC3] 在com.sun.proxy.$Proxy101。保存(未知来源)~[na:na] at com.mycompany.mbi.security.InitSecurity.initApplication(InitSecurity.java:32)~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)~ [na:1.8.0_131] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_131] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8 .0_131] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131] 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:369 ) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3] 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata。invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:312) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135) ~ [spring-beans-5.0.0.RC3.jar:5.0.0.RC3] ...省略23个常用框架

我的实体:

}

我的相关pom文件:

而我要做的就是拯救一个权威

0 投票
1 回答
465 浏览

neo4j - Spring Data Neo4j 5 的 EntityScan 在使用 Kotlin 时包含伴随对象

我通过 Spring Boot 2.0.0.M4 使用 Spring Data 5。

我注意到在使用@EntityScan和提供包时,它包括扫描 Kotlin 生成的“内部”类。在下面的示例中,我只有一个属性,但我也尝试过companion object { <property here> },但仍然出错。

有没有办法过滤掉 Kotlin 生成的这些内部类?

这是我得到的例外:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties$3

完整的堆栈跟踪:

我在下面创建了一个示例项目来提供帮助。

pom.xml

MbiTestApplication.kt

/model/Store.kt

/domain/StoreRepository.kt

/web/StoreController.kt

应用程序.yml

0 投票
1 回答
878 浏览

java - Spring 框架 Neo4jRepository 函数 findById 导致密码错误

背景

我的 spring data neo4j 应用程序发出密码错误。

这很奇怪,因为我使用 neo ogm 来管理我所有的 cyper 语句,我自己没有编写任何 cypher。

这是我的错误:

CLI 输出中的密码错误

密码错误后 CLI 输出中的 OGM 错误

在我的代码中定位错误的位置时出错 (GenericService)

GenericService 第 39 行

Optional<T> object = getRepository().findById(id, depth);

我被困在哪里

findById在 springframework.data.neo4j.repository.Neo4jRepository.java 中声明为Optional<T> findById(ID id, int depth);

自从我切换到 Spring data neo4j 5.0.0 以来,我最近开始使用 neo4jrepository 而不是 graphrepository。

所以,我想我已经在代码中找到了问题,但它不是我的代码,它是库,但我不能相信最新的 neo4j ogm 发布时存在findById函数错误。

问题

我如何克服这个密码错误?这个问题可能出自哪里?

更新 1

我正在使用 neo4j-ogm-version 3.0.0,spring-boot 2.0.0.M3,Neo4J 是 3.2.3 和 spring-data-neo4j 5.0.0.RELEASE,

更新 2

会不会是我的 id 被实例化为 aLong而 Neo4jRepository.java 被实例化为 a ID

GenericService.java 中的更多上下文

更新 3

springframework.data.neo4j.repository.Neo4jRepository.java 包含

0 投票
1 回答
895 浏览

java - 在 SDN 5.0.0 中创建 neo4j sessionfactory

背景

我有一个 Maven,Spring 数据 Neo4j 项目。它发布并获取单个对象。我正在尝试添加会话,但遇到错误。

有文档:https ://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference:session

他们建议这样做:

但是当我复制第二个时,@Bean我的 eclipse 标记:new org.neo4j.ogm.config.Configuration.Builder(properties)为红色,并建议我将类型配置更改为 Builder。然后不断建议更改,直到第二个@Bean看起来像:

但是随后第一个@Bean停止工作,因为它需要一个configuration().

问题

那么,当当前文档的建议不起作用时,如何添加 sessionfactory 呢?我查看了许多其他示例,但它们都使用旧版本和不推荐使用的东西,例如Neo4jConfiguration

笔记

我的 pom.xml 没有父级和这些依赖项和存储库:

更新 1

删除所有@Beans 并尝试此人设置:为什么带有 Spring Boot 2.0.0.M4 的 Neo4j OGM 显然需要嵌入式驱动程序? 像这样:

导致此错误:

我的ogm.properties文件是: