springboot 통합 neo4j
수요 설명:노드 는 enity,content,param 등 유형 이 있 지만 모든 노드 에 node 유형 이 있어 야 합 니 다.즉,두 개의 labels 속성 이 있어 야 합 니 다.
pom.xml
org.springframework.boot
spring-boot-starter-data-neo4j
org.neo4j
neo4j-ogm-http-driver
org.springframework.boot
spring-boot-starter-test
test
application.yml
spring:
data:
neo4j:
uri: http://127.0.0.1:7474
username: neo4j
password: pactera
@labels 주석 사용 하기
@labels 주석 은 spring-data-no4j 문서 에서 찾 았 습 니 다(https://docs.spring.io/spring-data/data-neo4j/docs/current/reference/html/)。이렇게 하면 노드 를 만 들 때 임의의 lables 를 추가 할 수 있 습 니 다.
@NodeEntity(label="entity")
@Data
public class EntityNode {
public EntityNode() {
List labels = new ArrayList<>();
labels.add("node");
labels.add("entity");
this.setLabels(labels);
}
@GeneratedValue
@Id
private Long id;
@Labels
private List labels ;
public String nodeId;
public String nodeName;
private String[] concepts;
private String regex;
//
@Property(name="default")
private String defaultJump;
}
// Neo4jRepository
public interface EntityRepository extends Neo4jRepository {
EntityNode findByNodeId(@Param("nodeId") String NodeId);
}
이렇게 하면 이해 하고 실현 하기 쉽 지만 많은 문제점 이 존재 합 니 다.@NodeEntity 에서 label="enity"이기 때문에 Entity Repository 에서 이 루어 진 함 수 는 모두 enity 유형의 노드 를 대상 으로 합 니 다.예 를 들 어 nodeRepository.findAll()함수 대응 실행 문 구 는'statement':'MATCH(n:'entity')RETURN n'이다.그렇다면 아 이 디 를 드 리 겠 습 니 다.구체 적 인 유형 을 모 르 면 엔 터 티 Repository,contentRepository,paramRepository 를 사용 해 야 합 니까?
상속 사용
@NodeEntity 주석 원본 코드
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface NodeEntity {
String LABEL = "label";
String label() default "";
}
그때 저도 이 문제 에 곤 혹 스 러 웠 습 니 다.마지막 으로@NodeEntity 주해 에@Inherited 주해 가 있 는 것 을 발 견 했 습 니 다.계승 을 사용 할 수 있 을 까 생각 했 습 니 다.
부모 클래스 node,노드 의 공공 속성 을 정의 합 니 다.(자신의 코드 에서 부모 클래스 는@Data 가 아 닌 get,set 방법 을 사용 합 니 다)
@NodeEntity(label="node")
@Data
public class Node implements Serializable{
private static final long serialVersionUID = 942659633583923942L;
@GeneratedValue
@Id
private Long id;
public String nodeId;
public String nodeName;
}
public interface NodeRepository extends Neo4jRepository {
}
하위 클래스,구체 클래스 의 구체 적 속성
@NodeEntity(label="entity")
@Data
@EqualsAndHashCode(callSuper=false)
public class EntityNode extends Node {
private static final long serialVersionUID = -3441407202518609463L;
private String[] concepts;
private String regex;
@Property(name="default")
private String defaultJump;
}
public interface EntityRepository extends Neo4jRepository {
EntityNode findByNodeId(@Param("nodeId") String NodeId);
}
EntityRepository 를 사용 하여 enity 형식 노드 만 들 기
@Test
@Rollback(false)
public void createNode() {
EntityNode entityNode= new EntityNode();
entityNode.setNodeId("test001");
entityNode.setNodeName(" 1");
entityNode.setRegex("123123123131");
entityRepository.save(entityNode);
}
//
{"statement":"UNWIND {rows} as row CREATE (n:`entity`:`node`) SET n=row.props RETURN row.nodeRef as ref, ID(n) as id, {type} as type
nodeRepository 를 사용 하여 임의의 형식의 노드 를 삭제 합 니 다.
@Test
@Rollback(false)
public void deleteById() {
nodeRepository.deleteById(1488l);
}
//
{"statement":"MATCH (n:`node`) WHERE ID(n) = { id } WITH n RETURN n"}
{"statement":"MATCH (n) WHERE ID(n) = { id } OPIONAL MATCH (n)-[r0]-() DELETE r0, n"}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.