如何解决无法使用 Repository
我的项目使用的是 Spring Data Neo4j 2.4.4。这是项目中的一些内容:
用户:
用户存储库:
我仍然可以使用Repository中的内置函数,例如save()、findAll(),...但是当我添加和使用某些函数时,例如“existsByUsername”,它出现错误:
11:53:26.562 [http-nio-8081-exec-1] WARN o.s.d.n.c.Neo4jPersistenceExceptionTranslator - Don't know how to translate exception of type class org.neo4j.driver.exceptions.NoSuchRecordException
你能帮我确定这个错误并给我一个解决方案吗?谢谢!\
更新: 我在 Postman 中调用 API,当我的数据库只有 1 个用户时,我收到了这个结果:
{
"error": "Records with more than one value cannot be converted without a mapper.; nested exception is java.lang.IllegalArgumentException: Records with more than one value cannot be converted without a mapper."
}
解决方法
如您的异常所述,Neo4j 没有返回任何记录,因此无法将其映射到布尔值。
最好使用 Optional<User>
并检查 isPresent()
@Query("MATCH (n:User {username: $username}) RETURN n")
Optional<User> existsForUsername(String username);
也就是说,它已经由 Spring Data 处理,无需使用自定义查询:
boolean existsByUsername(String username);
参考:https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#appendix.query.method.subject
,在 github 站点上有一组相当模糊的 NEO4J Spring Data 参考:here
似乎省略了 existsBy 属性。它正在修复,但是否已进入 Spring Data 存储库是另一回事。你不说你用的是哪个版本的 Spring-boot-starter-neo4j,但你可能会关心使用这个,看看它是否有效;
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
<version>2.4.4</version>
</dependency>
,
总的来说,这里的其他答案都是正确的。但是,如果您使用的是 Spring Boot 2.4.4,则不再支持 OGM。它现在使用一种称为 SDN 的模型(或者至少在开发时是这样)。您可能只是有依赖性问题。这是我的 Gradle 构建文件的一部分,这些应该是您需要的所有依赖项:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
application
id("org.springframework.boot") version "2.4.4"
id("io.spring.dependency-management") version "1.0.10.RELEASE"
}
java.sourceCompatibility = JavaVersion.VERSION_11
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-neo4j")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-web")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。