- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下节点:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@NodeEntity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private LocalDate birthday;
@Email
private String email;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@NodeEntity
public class Skill {
@Id
@GeneratedValue
private Long id;
private String name;
private String description;
}
还有这个RelationshipEntity
:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RelationshipEntity("RATED")
public class SkillRating {
@Id
@GeneratedValue
private Long id;
@Min(0)
@Max(100)
private Integer score;
private LocalDate measurementDate;
@StartNode
private Person person;
@EndNode
private Skill skill;
}
我不想加载我不打算使用的关系,即我不想添加:
@Relationship(type = "RATED")
private Set<SkillRating> skillRatings;
到我的 Person
类定义,以防止每次加载 Person
时加载这些评级。我想在必要时使用 Repository
方法加载它们。这是我尝试使用我对 JPA 存储库的了解:
@Repository
public interface SkillRatingRepository extends Neo4jRepository<SkillRating, Long> {
List<SkillRating> findAllByPerson(Person person);
}
但是这个方法并没有像预期的那样工作,因为它没有为一个人找到任何评级。我做错了什么?
-- 编辑--
MATCH (p)-[r:RATED]->(skill) WHERE id(p)={personId} RETURN r
我相信这是一个用 Neo4j Cypher 查询语言编写的查询,可以解决我的问题。我如何使用当前的类设置在 Repository
方法中“翻译”它?
最佳答案
感谢您的提问。
如您所见,我们不支持基于对象的派生查找器方法。与 @RelationshipEntity
还有一个额外的限制,即派生的查找器方法仅针对属性而不是结束或开始节点。
话虽如此,我已经接受了您的项目(域类)并为您创建了一个解决方案。所以,域类 Person
, Skill
和 SkillRating
可以按原样使用。
请申报您的SkillRatingRepository
像这样:
import java.util.List;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
public interface SkillRatingRepository extends Neo4jRepository<SkillRating, Long> {
@Query("MATCH (p)-[r:RATED]->(skill) WHERE id(p) = :#{#person.id} RETURN p, r, skill")
List<SkillRating> findAllByPerson(Person person);
}
@Query
表示自定义查询。在该自定义查询中,您可以使用 Spring 表达式语言 (SpEL),如此处所述 https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions .
因此,您将取消引用已通过的人并访问该 ID。与您已经编写的查询非常相似。请注意,您还必须返回开始和结束节点才能使映射工作。
如果您运行一个标准的 Spring Boot 项目,那么参数名称会在编译期间保留,不需要其他注释。如果您不保留它们,请添加 @Param("person")
到参数。
我注意到您使用的是 LocalDate
在你的域中。 Neo4j 3.4+ 和 Java(又名 Bolt)驱动程序原生支持这些。
在当前版本的 Spring Data Neo4j 和随 Spring Boot 2.1.8 分发的 Neo4j-OGM 中,可以激活它们,如下面的测试所示(向下滚动到带 Config
注释的 @TestConfiguration
类):
import static org.assertj.core.api.Assertions.*;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.neo4j.ogm.config.Configuration;
import org.neo4j.ogm.driver.ParameterConversionMode;
import org.neo4j.ogm.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
@SpringBootTest
@RunWith(SpringRunner.class)
@TestConfiguration
public class SkillRatingRepositoryTest {
@Autowired
private SkillRatingRepository skillRatingRepository;
@Autowired
private Session session;
@Autowired
private PlatformTransactionManager transactionManager;
@Test
public void retrievalOfSkillsShouldWork() {
Skill s = Skill.builder().name("Java")
.description("The Number one programming language everyone loves and hates").build();
new TransactionTemplate(transactionManager).execute(t -> {
session.purgeDatabase();
return null;
});
Person ms = Person.builder()
.firstName("Michael")
.lastName("Simons")
.build();
Person gm = Person.builder()
.firstName("Gerrit")
.lastName("M")
.build();
SkillRating r1 = SkillRating
.builder().person(ms)
.skill(s).measurementDate(LocalDate.now()).score(23).build();
SkillRating r2 = SkillRating
.builder().person(gm)
.skill(s).measurementDate(LocalDate.now()).score(42).build();
skillRatingRepository.saveAll(Arrays.asList(r1, r2));
List<SkillRating> skillRatings =
skillRatingRepository.findAllByPerson(gm);
assertThat(skillRatings).hasSize(1);
}
@TestConfiguration
static class Config {
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
Configuration.Builder builder = new org.neo4j.ogm.config.Configuration.Builder();
builder.uri("bolt://localhost:7687");
builder.credentials("neo4j", "secret");
builder.withCustomProperty(ParameterConversionMode.CONFIG_PARAMETER_CONVERSION_MODE,
ParameterConversionMode.CONVERT_NON_NATIVE_ONLY);
return builder.build();
}
}
}
请注意,我既没有使用嵌入式实例进行测试,也没有使用 @DataNeo4jTest
.想要查看我本地运行的实例中创建的数据。
我还建议不要在测试中使用嵌入式数据库,而是测试容器,也就是您将在生产中运行的“真实事物”:https://medium.com/neo4j/testing-your-neo4j-based-java-application-34bef487cc3c
作为最终引用,这里是 POM
我用了。如果这个东西有用并解决了您的问题,请接受答案。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>neo4j</groupId>
<artifactId>so_re</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>so_re</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
关于java - 如何使用@StartNode 关系查询 Neo4jRepository?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852233/
我已经在 OSX 上安装了 Docker 并下载了 neo 镜像。当我运行它时(使用图像主页中的 args),一切似乎都正常,但日志的最后几行表明如下: 00:20:39.662 [main] INF
我的正则表达式在 neos 项目中不能正常工作。DD/MM/YYYY 的正则表达式(仅限 19XX-20XX) var date_regex = /^(0[1-9]|1\d|2\d|3[01])\/(
Neo 4j可以与HDFS / Hadoop集成吗?在处理涉及许多关系且每秒具有大量事务的大型数据集时,通常使用Hadoop来提高Neo 4j的处理能力。 最佳答案 这是一个非常广泛的问题。也许考虑提
我尝试在 NEO 环境中使用 TenantAccessor。TenantAccessor.getCurrentTenant().getTenantId() 生成的 TenantId 作为 GUID 返
我下载了Neoclipse Source并下载了 Neo4J source 。但是 Neo4J 源文件中找不到 Neoclipse 源文件引用的某些类。它们已被弃用吗?我可以获得 Neoclipse
进程文件: neo or neo.exe 进程名称: Price Patrol 进程类别:存在安全风险的进程 英文描述: neo.exe is the execuatble for Pric
load csv with headers from 'file:///C:/Users/user/Desktop/Neo4J' as row Create (:State_Code {state_c
如何在 SAPUI5 应用程序的运行时为 neo-app.json 文件的 routes 部分定义新条目?例如在 Component.js 内部。 例如,我想将以下条目添加到文件中,或者将一些代码添加
我最近将一台计算机变成了 Ubuntu 服务器。我已经按照下面的文章 http://neos.readthedocs.io/en/stable/GettingStarted/Installation.
我正在尝试了解如何使用 NEOS Server for SCIP .我已经阅读了有关 CPLEX LP file format 的教程.但我仍然得不到任何结果。 让我们以该教程中提供的示例为例: Ma
关于这一年Bubble Cup (完)有问题NEO (我无法解决),它要求 给定一个包含 n 个整数元素的数组。我们把它分成几个部分(可能是1个),每个部分都是一个连续的元素。这种情况下的 NEO 值
我的 Rails 应用程序必须使用 Neo4j。所以我开始安装 neo4j 服务器。我按照步骤安装 here在 Linux 上。 但是当我运行的时候 ./bin/neo4j console 它给了 E
我刚从 windows 10 切换到 arch linux我想使用 (Neo)Vim 作为我的代码编辑器我已经完成了自动编译和模糊查找器但我不知道如何在 (Neo)Vim 中调试 任何帮助! 最佳答案
我想问一下,如何使用Spring boot找到Dijkstra。 我目前使用 spring-boot-starter-data-neo4j 库将 Neo4j 与我的 java 类映射。 我现在想使用
我正在尝试创建一个可以从 U2F token (例如 Java 语言的 Yubikey Neo)检索公钥和私钥的应用程序。我尝试在控制台中使用简单的扫描仪从 Yubikey Neo 获取任何内容,但它
我想用摩托罗拉68000汇编器写一个程序,目标平台是Neo Geo(九十年代的游戏机);这个问题很严重,我有一个我想实现的特定项目并且我有编程经验(虽然我现在主要是 Perl/R 编程,但我以前只接触
我使用自定义 Web 服务作为 neo4j 的非托管扩展。 这是 Neo4j 提供的详细信息,我已遵循该详细信息并创建了自己的非托管扩展。 http://neo4j.com/docs/stable/s
Typo3 Neos 是否原生支持元素的响应行为?例如像 css 网格类(col-sm-?? 或 col-md-??)这样的 Bootstrap ,或者我可以使用 Neos 通过 hidden-xs
我是为嵌入式板构建自定义 Linux 操作系统的新手 - 所以请忽略我的无知。 我有一个名为 NanoPi NEO 的开发板,它具有定制的 Debian Linux。现在开发板附带一个 .img 文件
我正在尝试使用脚本在 NEO4j db 中导入 csv 文件: LOAD CSV FROM "file:///dataframe6.txt" AS line RETURN count(*) 但我收到以
我是一名优秀的程序员,十分优秀!