问题标签 [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-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/#参考编程模型转换
有没有人有任何建议可以尝试或为什么会发生这种情况?
neo4j - 弹簧数据 | 新4J | 以正确的顺序查询路径
版本:
这是我的实体:
我正在尝试获取 A 和 D 之间的路线,我需要以正确的顺序将结果作为 A、B、C 和 D,然后我将在每个对象中获取总线。
这是我的密码:
但结果的顺序不正确。我将结果视为 D、C、A、B(或某种随机顺序),而不是 A、B、C、D。
我能想到的一种方法是向 OperatedByBus 添加一个属性,例如 int legId,然后在我的查询中按 legId 排序。不确定这是否是最好的方法。
有什么我想念的吗?
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 填充第二个参数字段?
neo4j - Spring Data Neo4j 5 OGM 3 和 Spring Boot 2.0.0.M4
我正在尝试从迁移SDN 4.2
到SDN 5
和OGM 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 步开始阅读。
运行
mvn docker:start -Dfile.encoding=UTF-8
以在 Docker 容器中启动 Neo4j 3.2.5(必须安装 Docker)执行测试
com.decisionwanted.domain.DecisionCharacteristicIT.testUpdateValue()
测试应该失败并断言:
从以下代码可以看出:
我已经rdbmsHorScalingValue
用 user3 更新了,并且在Value
通过 id 获取之后(valueDao.getById())
我希望这个用户是,rdbmsHorScalingValue.getUpdateUser()
但由于某种未知的原因,这是不正确的。
但是,如果我们更改以下方法:从tocom.decisionwanted.domain.dao.decision.characteristic.value.history.HistoryValueDaoImpl.create(Value)
保存深度- 一切都开始正常工作。1
2
现在我不知道问题出在哪里,我唯一知道的是 - 使用 SDN 4.2 保存深度 = 1 时效果很好。
请告诉我问题出在哪里(为什么它不适用于 SDN 5)以及如何解决它。
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
给出错误:
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
?
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文件:
而我要做的就是拯救一个权威
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
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 包含
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
删除所有@Bean
s 并尝试此人设置:为什么带有 Spring Boot 2.0.0.M4 的 Neo4j OGM 显然需要嵌入式驱动程序?
像这样:
导致此错误:
我的ogm.properties
文件是: