java.lang.NoSuchFieldError:已同步

问题描述

执行以下代码时出现错误,请您帮我解决错误

public fun getEntityManager(): EntityManager {
    val tm: TransactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager()
  
    val emf: EntityManagerFactory = Persistence.createEntityManagerFactory(
            "mongo-ogm")
    tm.begin()
   return emf.createEntityManager()
}

原因:java.lang.NoSuchFieldError:FSYNCED 在org.hibernate.ogm.datastore.mongodb.options.WriteConcernType。(WriteConcernType.java:37) 在org.hibernate.ogm.datastore.mongodb.options.impl.WriteConcernoption。(WriteConcernoption.java:29) 在java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在java.base / jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在java.base / java.lang.class.newInstance(Class.java:584) 在org.hibernate.ogm.options.navigation.source.impl.ConfigurationoptionValueSource $ ConfigurationBasedOptionContainer.getAll(ConfigurationoptionValueSource。 java:82)

<persistence-unit name="mongo-ogm" transaction-type="JTA">
    <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>

    <class>com.ogm.model.UserEntity</class>
    <properties>
        
        <property name="hibernate.ogm.datastore.provider" value="mongodb"/>
        <property name="hibernate.ogm.datastore.database" value="demo"/>
        <property name="hibernate.ogm.mongodb.host" value="localhost"/>
        <property name="hibernate.ogm.mongodb.username" value=""/>
        <property name="hibernate.ogm.mongodb.password" value=""/>
      <!--  <property name="" value="localhost"/>-->
        <property name="hibernate.search.default.directory_provider" value="filesystem"/>
        <property name="hibernate.search.default.indexBase" value="/tmp/.hibernate_ogm_demo_luceneindexes"/>
    </properties>

</persistence-unit>
implementation("org.hibernate.ogm:hibernate-ogm-mongodb:5.4.1.Final")
implementation("org.mongodb:mongodb-driver-reactivestreams:4.0.5")
implementation("org.jboss.narayana.jta:narayana-jta:5.8.1.Final")
implementation("org.jboss:jboss-transaction-spi:7.6.0.Final")

解决方法

通常,当您的依赖项不匹配时,会发生此问题。 我怀疑您的类路径中有多个版本的hibernate-ogm-mongodb。

hibernate-ogm-mongodb:5.4.1.Final包含枚举WriteConcernType.FSYNCED(WriteConcern.FSYNCED)

  1. 运行gradle dependencies | grep hibernate-ogm-mongodb,验证是否有多个版本的库作为依赖项。
  2. 从您的build.gradle文件中的其他依赖项中排除较旧/其他版本。