java - 意外的UpgradingStoreVersionException - "Expected ' v0.A。 3' but file is version "与 Neo4j 服务器和 Hibernate OGM

标签 java hibernate neo4j hibernate-ogm

我正在尝试 Neo4j + Hibernate OGM。我从 this tutorial 开始。从那里开始,我现在可以创建和更新实体,还可以使用 JP-QL 查询运行一些自定义查询: 1 , 2 .

使用Neo4j Community Edition 3.1.0 for Windows 64 bit ,选择我的嵌入式数据库的数据目录,然后导航到Web View ,我可以成功查看数据。

但是,此后,我在运行 Java 应用程序时遇到了以下问题。

  1. 当我尝试运行该应用程序时,同时 Neo4j Community Edition 服务器也在运行,我遇到了以下问题:

    org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process: target\test_data_dir\store_lock. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access)

    这个错误似乎是不言自明的,可以通过停止服务器来解决。我的问题是,是否有任何工具/配置可以让我同时完成这两件事;即运行应用程序,并查看服务器中的数据。

  2. 停止服务器并再次运行应用程序后我遇到的另一个主要错误是以下错误。

    org.neo4j.kernel.impl.storemigration.StoreUpgrader$UnexpectedUpgradingStoreVersionException: 'G:\Workspace\Java\Neo4jTest\target\test_data_dir\neostore.nodestore.db' has a store version number that we cannot upgrade from. Expected 'v0.A.3' but file is version '

    如果我删除数据库并再次启动应用程序(从头开始),那么一切都会好起来,直到我启动服务器。如何解决这个问题?

其他信息:

  • 我的 Maven 依赖项:

    <dependencies>
    
        <!-- https://mvnrepository.com/artifact/org.hibernate.ogm/hibernate-ogm-neo4j -->
        <dependency>
            <groupId>org.hibernate.ogm</groupId>
            <artifactId>hibernate-ogm-neo4j</artifactId>
            <version>5.0.4.Final</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.jboss.jbossts/jbossjta -->
        <dependency>
            <groupId>org.jboss.jbossts</groupId>
            <artifactId>jbossjta</artifactId>
            <version>4.16.6.Final</version>
        </dependency>
    
    </dependencies>
    
  • 我的persitence.xml:

    <?xml version="1.0" encoding="utf-8"?>
    
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"     
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">
    
    <persistence-unit name="hikePu" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
    
        <properties>
            <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded" />
            <property name="hibernate.ogm.datastore.database" value="HikeDB" />
            <property name="hibernate.ogm.neo4j.database_path" value="target/test_data_dir" />
            <property name="hibernate.ogm.neo4j.configuration_resource_name" value="target/test_data_dir/_myNeo4j.conf" />
        </properties>
    </persistence-unit>
    

  • _myNeo4j.conf:

    #***************************************************************
    # Server configuration
    #***************************************************************
    
    # This setting constrains all `LOAD CSV` import files to be under the `import` directory. Remove or uncomment it to
    # allow files to be loaded from anywhere in filesystem; this introduces possible security problems. See the `LOAD CSV`
    # section of the manual for details.
    dbms.directories.import=import
    
    # Require (or disable the requirement of) auth to access Neo4j
    dbms.security.auth_enabled=true
    
    # With default configuration Neo4j only accepts local connections.
    # To accept non-local connections, uncomment this line:
    #dbms.connectors.default_listen_address=0.0.0.0
    
    # You can also choose a specific network interface, and configure a non-default
    # port for each connector, by setting their individual listen_address.
    
    # The address at which this server can be reached by its clients. This may be the server's IP address or DNS name, or
    # it may be the address of a reverse proxy which sits in front of the server. This setting may be overridden for
    # individual connectors below.
    #dbms.connectors.default_advertised_address=localhost
    
    # You can also choose a specific advertised hostname or IP address, and
    # configure an advertised port for each connector, by setting their
    # individual advertised_address.
    
    # Bolt connector
    dbms.connector.bolt.enabled=true
    #dbms.connector.bolt.tls_level=OPTIONAL
    #dbms.connector.bolt.listen_address=:7687
    
    # HTTP Connector
    dbms.connector.http.enabled=true
    #dbms.connector.http.listen_address=:#{default.http.port}
    
    # HTTPS Connector
    dbms.connector.https.enabled=true
    #dbms.connector.https.listen_address=:#{default.https.port}
    
    # Certificates directory
    # dbms.directories.certificates=certificates
    
    #*****************************************************************
    # Administration client configuration
    #*****************************************************************
    
    
    # Comma separated list of JAX-RS packages containing JAX-RS resources, one
    # package name for each mountpoint. The listed package names will be loaded
    # under the mountpoints specified. Uncomment this line to mount the
    # org.neo4j.examples.server.unmanaged.HelloWorldResource.java from
    # neo4j-examples under /examples/unmanaged, resulting in a final URL of
    # http://localhost:${default.http.port}/examples/unmanaged/helloworld/{nodeId}
    #dbms.unmanaged_extension_classes=org.neo4j.examples.server.unmanaged=/examples/unmanaged
    
    #*****************************************************************
    # HTTP logging configuration
    #*****************************************************************
    
    # HTTP logging is disabled. HTTP logging can be enabled by setting this
    # property to 'true'.
    dbms.logs.http.enabled=false
    
    # Enable this to be able to upgrade a store from an older version.
    dbms.allow_format_migration=true
    
    # The amount of memory to use for mapping the store files, in bytes (or
    # kilobytes with the 'k' suffix, megabytes with 'm' and gigabytes with 'g').
    # If Neo4j is running on a dedicated server, then it is generally recommended
    # to leave about 2-4 gigabytes for the operating system, give the JVM enough
    # heap to hold all your transaction state and query context, and then leave the
    # rest for the page cache.
    # The default page cache memory assumes the machine is dedicated to running
    # Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size.
    #dbms.memory.pagecache.size=10g
    
    # Enable this to specify a parser other than the default one.
    #cypher.default_language_version=2.0
    
    # Keep logical logs, helps debugging but uses more disk space, enabled for
    # legacy reasons To limit space needed to store historical logs use values such
    # as: "7 days" or "100M size" instead of "true".
    #dbms.tx_log.rotation.retention_policy=7 days
    
    # Enable shell server so that remote clients can connect via Neo4j shell.
    #dbms.shell.enabled=true
    # The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
    #dbms.shell.host=127.0.0.1
    # The port the shell will listen on, default is 1337.
    #dbms.shell.port=1337
    
    allow_store_upgrade=true
    

最佳答案

当时只有一个进程可以获取嵌入式 Neo4j 上的锁。

因此,如果您使用 OGM,则无法使用 Neo4j 服务器访问它,反之亦然。我认为目前没有任何方法可以解决这个问题。

如果您想在应用程序运行时检查数据库,您需要使用 Bolt 协议(protocol)或 HTTP API 连接到服务器。您只需要更新 Hibernate OGM 配置文件即可。

Hibernate OGM 5.0.4.Final 使用旧版本的 Neo4j:2.3.5 当您打开和关闭服务器时,文件版本会发生变化,Hibernate OGM 无法再识别它。

Hibernate OGM 5.1.0.Beta3 目前使用 Neo4j 3.0.8,但我提出了一个问题来升级它。

关于java - 意外的UpgradingStoreVersionException - "Expected ' v0.A。 3' but file is version "与 Neo4j 服务器和 Hibernate OGM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41568829/

相关文章:

java - 使用 Maven 运行 GWTTestCase

hibernate - “一对多”属性值类型不应为 'persistence entity'

neo4j - 如何使用cypher删除neo4j 2.0中的节点或具有NULL属性的关系

neo4j - 具有深度和过滤查询的 Memgraph 密码递归树

java - 使用带有属性映射的 Cypher CREATE 命令,来自 Java

java - Hibernate总是得到java.lang.IllegalArgumentException : Can not set java. lang.Long字段

java - Servlet Dispatcher Servlet 的初始 spring mvc 配置 : Servlet. init() 引发异常

java - redis pub sub with jedis , sub crashes with error

java - 相当于Hibernate中的ResultSet.getRow()

java - ORDER BY 与 GROUP BY 查询,使用 JPA 和 Hibernate