簡體   English   中英

無法解析“事務”中的方法“findNode”

[英]Cannot resolve method 'findNode' in 'Transaction'

我正在嘗試理解Traversal API for Neo4j ,但我遇到了依賴項問題:

Cannot resolve method 'findNode' in 'Transaction'

還:

Cannot resolve method 'traversalDescription' in 'Transaction'

這是我的代碼(由於依賴關系,我仍然不確定它是否有效 - 任何與問題無關的提示都將不勝感激):

import org.neo4j.driver.Driver;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;import org.neo4j.driver.Session;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.traversal.*;

public class Main {
    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "password"));
        try (Session session = driver.session()) {
            // Start a new transaction
            try (Transaction tx = (Transaction) session.beginTransaction()) {
                // Get the traversal description
                TraversalDescription traversal = tx.traversalDescription()
                        .depthFirst()
                        .uniqueness(Uniqueness.NODE_GLOBAL);
                Node startNode = tx.findNode(Label.label("Node"), "id", 0);
                // Traverse the graph
                Traverser traverser = traversal.traverse(startNode);
                for (Path path : traverser) {
                    Node node = path.endNode();
                    System.out.println("Node id: " + node.getProperty("id"));
                }
                tx.success();
            }
        } finally {
            driver.close();
        }
    }
}

pom.xml文件:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>groupId</groupId>
    <artifactId>Traversal</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ZBD</name>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.neo4j.driver</groupId>
            <artifactId>neo4j-java-driver</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-graphdb-api</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我嘗試使用GitHub 上neo4j存儲庫中的示例,但依賴關系仍然是一個問題。

您的庫和代碼現在已經很舊了。 這是一個帶有新版本的 Maven 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>Traversal</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ZBD</name>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.neo4j.driver</groupId>
            <artifactId>neo4j-java-driver</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-graphdb-api</artifactId>
            <version>5.3.0</version>
        </dependency>
    </dependencies>
</project>

而且不使用Traversal Framework,貌似現在推薦使用Cypher。 並且更容易找到樣品。 請看這里: https://neo4j.com/docs/java-reference/current/java-embedded/cypher-java/

你正在混合兩種不同的東西。

neo4j-java-driver用於與遠程服務器通信,只允許執行 Cypher 查詢:

var authToken = AuthTokens.basic("neo4j", "password");
try (Driver driver = GraphDatabase.driver("bolt://localhost:7687", authToken);
     Session session = driver.session()) {
    var result = session.run("CREATE (n)");
    var summary = result.consume();
    System.out.println(summary.counters().nodesCreated());
}

實例內部使用遍歷 Java API,或者通過擴展,或者嵌入 Neo4j。 您不能將 Java 驅動程序和遍歷 API 混合在一起。

try (Transaction tx = db.beginTx()) {
    Node node; // find some node
    for (Path path : tx.traversalDescription()
        .depthFirst()
        .relationships(Rels.KNOWS)
        .uniqueness(Uniqueness.RELATIONSHIP_GLOBAL)
        .traverse(node)) {
        // do something
    }
}

請注意,這里的事務是從db開始的,它是一個GraphDatabaseService的注入實例,而不是從 Java 驅動程序的Session

旁注:

  • neo4j-graphdb-api的 3.0.1 版本非常舊。 Neo4j 3.0.1很久以前就已經結束了。
  • 您的編譯器配置目標 Java 8,目標 Java 11 的簡寫屬性在這里無效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM