代码之家  ›  专栏  ›  技术社区  ›  taviss

播放框架2.5.4休眠搜索

  •  0
  • taviss  · 技术社区  · 8 年前

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

    play.api.http。HttpErrorHandlerExceptions$$anon$1:执行 异常[[ProvisionException:无法设置,请参阅以下内容 错误:1)注入构造函数时出错,java.lang.AbstractMethodError 在 play.db.jpa.DefaultJPAApi$JPAApiProvider(默认JPAApi.java:39) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) 查找play.db.jpa时。默认JPAApi$JPAApiProvider 定位play.db.jpa.JPAApi 参数0的play.db.jpa.TransactionalAction。(Transactional Action.java:20)
    查找play.db.jpa时。TransactionalAction 1错误]],位于 在 play.api.http.DefaultHttpErrorHandler.onServerError(http错误处理程序.scala:206) at-play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) 位于play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) play.api.http.GlobalSettingsHttpErrorHandler.onServerError(http错误处理程序.scala:98) 在 play.core.server.netty.PlayRequestHandler$$anonfun$2$$annofun$apply$1.applyOrElse(PlayRequest Handler.scala:100) 在 play.core.server.netty.PlayRequestHandler$$anonfun$2$$annofun$apply$1.applyOrElse(PlayRequest Handler.scala:99) 在 scala.conconcurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) 在 scala.conconcurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) 位于scala.conconcurrent.impl.CallbackRunnable.run(Promise.scala:32) play.api.libs.iterate.Execution$trampoline$.execute(Execution.scala:70) 在 scala.conconcurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) 在 scala.conconcurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) 位于scala.conconcurrent.Promise$class.complete(Promise.scala:55) scala.conconcurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) 位于scala.conconcurrent.Promise$class.failure(Promise.scala:104) scala.conconcurrent.impl.Promise$DefaultPromise.failure(Promise.scala:153) 位于scala.conconcurrent.Future$$anonfun$flatMap$1.apply(Future.scala:255) 位于scala.conconcurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) 位于scala.conconcurrent.impl.CallbackRunnable.run(Promise.scala:32) akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) 在 akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) 在 在 akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) 在 scala.conconcurrent.BlockContext$.withBlockContext(块上下文.scala:72) 在 akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) 位于akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJointTask.exec(AbstractDispatcher.scala:405) 在 scala.conconcurrent.forkjoin.ForkJoinTask.doExec(ForkJointTask.java:260) 在 scala.conconcurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJointPool.java:1339) 在 scala.conconcurrent.forkjoin.ForkJoinPool.runWorker(ForkJoingPool.java:1979) 在 scala.conconcurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoineWorkerThreed.java:107) java.lang.AbstractMethod错误位于 play.db.jpa.DefaultJPAApi$JPAApiProvider(默认JPAApi.java:39) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) 查找play.db.jpa时。默认JPAApi$JPAApiProvider 定位play.db.jpa.JPAApi 参数0的play.db.jpa.TransactionalAction。(Transactional Action.java:20)
    查找play.db.jpa时。处的TransactionalAction 1错误 com.google.inject.internal.InjectorImpl$2.get(InjectorImpler.java:1025) 在 com.google.inpject.internal.InpjectImpl.getInstance(InjectorImpl.java:1051) 在 play.api.inject.guice.GuiceInjector.instanceOf(GuideInjectorBuilder.scala:405) 在 play.core.j.DefaultJavaHandlerComponents.getAction(JavaAction.scala:142) at-play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:91),网址: play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:89)网址 scala.colection.IndexedSeqOptimized$class.foldl(IndexedSeq Optimized.scala:57) 在 scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeq Optimized.scala:66) play.core.j.JavaAction.apply(JavaAction.scala:89)位于 play.api.mvc.Action$$anonfun$apply$2$$annofun$apply$5$$anofun$apply$16.apply(Action.scala:112) 在 play.api.mvc.Action$$anonfun$apply$2$$annofun$apply$5$$anofun$apply$16.apply(Action.scala:112) 位于play.utils.Threads$.withContextClassLoader(Threads.scala:21) play.api.mvc.Action$$anonfun$apply$2$$annofun$apply$5.apply(Action.scala:111) 在 play.api.mvc.Action$$anonfun$apply$2$$annofun$apply$5.apply(Action.scala:110) 位于scala.Option.map(Option.scala:146),位于 play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110)网址 play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103)网址 scala.conconcurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) …省略了14个公共帧导致的原因: java.lang.AbstractMethod错误:处为空 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:275) 在 org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483) 在 在 org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(hibernate Persistence Provider.java:58) 在 javax.persistence.persistence.createEntityManagerFactory(persistence.java:55) 在 atplay.db.jpa.DefaultJPAApi.lambda$start$1(DefaultJPAApi.java:60) 位于java.lang.Iterable.forEach(Iterable.java:75) play.db.jpa.DefaultJPAApi.start(DefaultJPAApi.java:59)位于 play.db.jpa.DefaultJPAApi$JPAApiProvider(默认JPAApi.java:46) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider$$FastClassByGuide$$dcd4cdbd.newInstance() 在 com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstractor.java:40) 在 com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConsstructionProdyFactory.java:61) 在 com.google.inject.internal.ConstructorInjector.provision(构造函数注入器.java:105) 在 com.google.inject.internal.ConstructorInjector.construct(构造函数注射器.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(构造函数绑定Impl.java:267) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProvidertoInternalFacctoryAdapter.java:46) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImple.java:1103) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProvidertoInternalFacctoryAdaptor.java:40) 在 com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) 在 com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryTOProviderAttapter.java:41) 在 com.google.inject.internal.BoundProviderFactory.get(BoundProverFactory.java:61) 在 在 com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) 在 com.google.inject.internal.ConstructorInjector.provision(构造函数注入器.java:104) 在 com.google.inject.internal.ConstructorInjector.construct(构造函数注射器.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(构造函数绑定Impl.java:267) 在 com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpler.java:1016) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImple.java:1092) 在 com.google.inject.internal.InjectorImpl$2.get(InjectorImpler.java:1012) …省略了32个公共帧

    内置.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"
    [...]
    

    应用程序配置文件

    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 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 回复  |  直到 7 年前
        1
  •  0
  •   asch    8 年前

    您的配置中似乎缺少一些内容。 下面是我使用的工作配置的一个示例(只是替换了实名)。请注意,没有使用hibernate.cfg.xml。

    内置.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
        ...
    

    应用程序配置文件:

    # ~~~~~
    # 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>
    

        2
  •  0
  •   Community Marino Di Clemente    7 年前

    我通过使用:

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

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