首页 文章

Play Framework 2.5.4 Hibernate搜索

提问于
浏览
0

我正在使用Play 2.5.4(用Java编码)和Hibernate 5.2.1和JPA . 我尝试添加Hibernate Search但是当我在build.sbt中启用它时,我一直收到以下错误:

play.api.http.HttpErrorHandlerExceptions $$ anon $ 1:执行异常[[ProvisionException:无法配置,请参阅以下错误:1)在play.db.jpa.DefaultJPAApi $ JPAApiProvider上注入构造函数java.lang.AbstractMethodError时出错 . (DefaultJPAApi.java:39)在play.db.jpa.DefaultJPAApi $ JPAApiProvider.class(DefaultJPAApi.java:34)中找到play.db.jpa.DefaultJPAApi $ JPAApiProvider,同时找到参数0的play.db.jpa.JPAApi play.db.jpa.TransactionalAction . (TransactionalAction.java:20)在play.api.http.HttpErrorHandlerExceptions $ .throwableToUsefulException(HttpErrorHandler.scala:280)的play.api中定位play.db.jpa.TransactionalAction 1 error] play.api.GlobalSettings $ class.onError(GlobalSettings.scala:160)中的.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)at play.api.DefaultGlobal $ .onError(GlobalSettings.scala:188)at play.api play.core.server.netty.Pla上的.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98) yRequestHandler $$ anonfun $ 2 $$ anonfun $ apply $ 1.applyOrElse(PlayRequestHandler.scala:100)at play.core.server.netty.PlayRequestHandler $$ anonfun $ 2 $$ anonfun $ apply $ 1.applyOrElse(PlayRequestHandler.scala:99)at scala.concurrent.Future $$ anonfun $ recoverWith $ 1.apply(Future.scala:344)at scala.concurrent.Future $$ anonfun $ recoverwith $ 1.apply(Future.scala:343)at scala.concurrent.impl.CallbackRunnable . 在scala上scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)的play.api.libs.iteratee.Execution $ trampoline $ .execute(Execution.scala:70)上运行(Promise.scala:32) . concurrent.impl.Promise $ defaultPromise.tryComplete(Promise.scala:248)scala.concurrent.Promise $ class.complete(Promise.scala:55)at scala.concurrent.impl.Promise $ DefaultPromise.complete(Promise.scala: 153)scala.concurrent.Promise $ class.failure(Promise.scala:104)at scala.concurrent.impl.Promise $ DefaultPromise.failure(Promise.scala:153)at scala.concurrent.Future $$ anonfun $ flatMap $ 1 scala.conc中的.apply(Future.scala:255) urrent.Future $$ anonfun $ flatMap $ 1.apply(Future.scala:249)at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)at akka.dispatch.BatchingExecutor $ AbstractBatch.processBatch(BatchingExecutor.scala: 55)at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply $ mcV $ sp(BatchingExecutor.scala:91)at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply(BatchingExecutor.scala: 91)at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply(BatchingExecutor.scala:91)at scala.concurrent.BlockContext $ .withBlockContext(BlockContext.scala:72)at akka.dispatch.BatchingExecutor $ BlockableBatch . 运行(BatchingExecutor.scala:90)at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)at akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:405)at scala.concurrent.forkjoin.ForkJoinTask.doExec (ForkJoinTask.java:260)在scala.concurrent的scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339) . forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)引发:com.google.inject.ProvisionException:无法配置,请参阅以下错误:1 )在play.db.jpa.DefaultJPAApi $ JPAApiProvider . (DefaultJPAApi.java:39)的play.db.jpa.DefaultJPAApi $ JPAApiProvider.class(DefaultJPAApi.java:34)中定位游戏时注入构造函数java.lang.AbstractMethodError时出错.db.jpa.DefaultJPAApi $ JPAApiProvider在play.db.jpa.TransactionAction . (TransactionalAction.java:20)找到参数0的play.db.jpa.JPAApi,同时在com找到play.db.jpa.TransactionalAction 1错误 . go.inject.internal.InjectorImpl $ 2.get(InjectorImpl.java:1025)at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder .scala:405)at play.core.j.DefaultJavaHandlerComponents.getAction(JavaAction.scala:142)at play.core.j.JavaActio n $$ anonfun $ 6.apply(JavaAction.scala:91)at play.core.j.JavaAction $$ anonfun $ 6.apply(JavaAction.scala:89)at scala.collection.IndexedSeqOptimized $ class.foldl(IndexedSeqOptimized.scala: 57)scala.collection.IndexedSeqOptimized $ class.foldLeft(IndexedSeqOptimized.scala:66)at scala.collection.mutable.ArraySeq.foldLeft(ArraySeq.scala:46)at play.core.j.JavaAction.apply(JavaAction.scala) :89)at play.api.mvc.Action $$ anonfun $ apply $ 2 $$ anonfun $ apply $ 5 $$ anonfun $ apply $ 6.apply(Action.scala:112)at play.api.mvc.Action $$ anonfun $申请$ 2 $$ anonfun $ apply $ 6.apply(Action.scala:112)at play.utils.Threads $ .withContextClassLoader(Threads.scala:21)at play.api.mvc.Action $$ anonfun $ apply $ 2 $$ anonfun $ apply $ 5.apply(Action.scala:111)atplay.api.mvc.Action $$ anonfun $ apply $ 2 $$ anonfun $ apply $ 5.apply(Action.scala:110)at scala.Option.map(Option.scala:146)at play.api.mvc.Action $ $ anonfun $ apply $ 2.apply(Action.scala:110)at play.api.mvc.Action $$ anonfun $ apply $ 2.apply(Action.scala:103)at scala.concurrent.Future $$ anonfun $ flatMap $ 1 . apply(Future.scala:251)...省略了14个常见帧引起:java.lang.AbstractMethodError:null org.hibernate.internal.SessionFactoryImpl . (SessionFactoryImpl.java:275)at org.hibernate.boot.internal . SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483)org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888)atg.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)at javax atpersistence.Persistence.createEntityManagerFactory(Persistence.java:55)at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)at play.db.jpa.DefaultJPAApi.lambda $ start $ 1( DefaultJPAApi.java:60)在java.lang.Iterable.forEach(Iterable.java:75)的play.db.jpa.DefaultJPAApi.start(DefaultJPAApi.java:59)at play.db.jpa.DefaultJPAApi $ JPAApiProvider . ( DefaultJPAApi.java:46)在com.google.inject.internal.cglib.reflect的play.db.jpa.DefaultJPAApi $ JPAApiProvider $$ FastClassByGuice $$ dcd4cdbd.newInstance() . $ FastConstructor.newInstance(FastConstructor.java:40) com.google.inject.internal.DefaultConstructionProxyFactory $ 1.newInstance(DefaultConstructionProxyFactory.java:61)at com.google.inject.ConstructorInjector.provision(ConstructorInjector.java:105)com.google.inject.internal.ConstructorInjector . 在com.google.inject.inject.ConstructorBindingImpl $ Factory.get(ConstructorBindingImpl.java:267)的com.google.inject.internal.ProviderToInternalFactoryAdapter $ 1.call(ProviderToInternalFactoryAdapter.java:46)上构造(ConstructorInjector.java:85) com.google.inject.inject.inject.internal.Pr中的com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) oviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)at com.google.inject.SintonScope $ 1.get(SingletonScope.java:145)at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)at at Com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:61)位于com.google.inject.internal.SingleParameterInjector.getAll的一个com.google.inject.internal.SingleParameterInjector.inject.SingleParameterInjector.inject.SinParameterInjector.getAll( SingleParameterInjector.java:62)com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104)com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:85)com.google.inject上的com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104) .internal.ConstructorBindingImpl $ Factory.get(ConstructorBindingImpl.java:267)com.google.inject.InjectorImpl.callInContext(injectorImpl)com.google.inject.internal.InjectorImpl $ 2 $ 1.call(InjectorImpl.java:1016) .java:1092)在com.google.inject.internal.I njectorImpl $ 2.get(InjectorImpl.java:1012)...省略了32个常用帧

在build.sbt中:

[...]
  "org.hibernate" % "hibernate-core" % "5.2.1.Final",
  "org.hibernate" % "hibernate-entitymanager" % "5.2.1.Final",
  "mysql" % "mysql-connector-java" % "5.1.36",
  //"org.hibernate" % "hibernate-search-orm" % "5.2.1.Final", -> Uncommenting this results in error
  "org.apache.lucene" % "lucene-core" % "5.3.1",
  "dom4j" % "dom4j" % "1.6"
[...]

application.conf

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/db?autoReconnect=true"
[...db info...]
db.default.jndiName = DefaultDS
jpa.default = defaultPersistenceUnit

的hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost/db?autoReconnect=true</property>
    <property name="connection.username">###</property>
    <property name="connection.password">###</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>


</session-factory>
</hibernate-configuration>

persistence.xml中

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
                 version="2.1">
        <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
            <non-jta-data-source>DefaultDS</non-jta-data-source>
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        </properties>

    </persistence-unit>
</persistence>

我似乎无法找到关于如何在Play Framework 2.5中使用Hibernate Search的好教程 .

谢谢!

LE:

我通过使用以下方式解决它:

...
  "org.hibernate" % "hibernate-entitymanager" % "4.3.10.Final",
  "org.hibernate" % "hibernate-search-orm" % "5.3.0.Final",
...

正如这里建议的那样:https://stackoverflow.com/a/30656145/6682875

2 回答

  • 0

    我通过使用以下方式解决它:

    ...
      "org.hibernate" % "hibernate-entitymanager" % "4.3.10.Final",
      "org.hibernate" % "hibernate-search-orm" % "5.3.0.Final",
    ...
    

    如下所示:https://stackoverflow.com/a/30656145/6682875

  • 0

    您的配置似乎缺少一些东西 . 以下是我使用的工作配置示例(仅替换实名) . 注意,没有使用hibernate.cfg.xml .

    build.sbt:

    val hibernateVersion = "4.3.10.Final"
    val mySqlConnectorVersion = "5.1.36"
    
    libraryDependencies ++= Seq(
      javaJpa
    )
    ...
    libraryDependencies ++= Seq(
        ...
        "org.hibernate" % "hibernate-entitymanager" % hibernateVersion,
        "mysql" % "mysql-connector-java" % mySqlConnectorVersion
        ...
    

    application.conf:

    # ~~~~~
    # MySql 5.6
    db.default.driver=com.mysql.jdbc.Driver
    db.default.username="user" - put here your DB user name
    db.default.password="password" - put here your DB user password
    dbhosts="hostip:port" - put here your host and DB port
    dbschema="dbschema" - put here the exact case-sensitive name of the DB schema
    dbproperties="?autoReconnect=true"
    db.default.url="mysql://"${db.default.username}":"${db.default.password}"@"${dbhosts}"/"${dbschema}${dbproperties}
    db.default.jndiName=MyDS
    jpa.default=myDbPersistanceUnit
    

    persistence.xml中:

    <persistence-unit name="myDbPersistanceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>MyDS</non-jta-data-source>
        <!--Model mapping (optional) like below-->
        <!--class>persistence.models.SomeEntityClass</class>-->
        ....
    <properties>
        <!--Hibernate properties -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
    </properties>
    

相关问题