【问题标题】:Play Framework 2.5.4 Hibernate searchPlay Framework 2.5.4 休眠搜索
【发布时间】:2016-12-12 00:36:36
【问题描述】:

我正在使用带有 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.(DefaultJPAApi.java:39) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) 同时定位 play.db.jpa.DefaultJPAApi$JPAApiProvider 而 定位 play.db.jpa.JPAApi 参数 0 在 play.db.jpa.TransactionalAction.(TransactionalAction.java:20)
定位 play.db.jpa.TransactionalAction 1 错误]] 在 play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280) 在 play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206) 在 play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) 在 play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) 在 play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98) 在 play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) 在 play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) 在 scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) 在 scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) 在 scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 在 play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) 在 scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) 在 scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) 在 scala.concurrent.Promise$class.complete(Promise.scala:55) 在 scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) 在 scala.concurrent.Promise$class.failure(Promise.scala:104) 在 scala.concurrent.impl.Promise$DefaultPromise.failure(Promise.scala:153) 在 scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:255) 在 scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) 在 scala.concurrent.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) 在 akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) 在 scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) 在 akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) 在 akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) 在 akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:405) 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 引起:com.google.inject.ProvisionException:无法配置, 看到以下错误:1)注入构造函数时出错, java.lang.AbstractMethodError 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.(DefaultJPAApi.java:39) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) 同时定位 play.db.jpa.DefaultJPAApi$JPAApiProvider 而 定位 play.db.jpa.JPAApi 参数 0 在 play.db.jpa.TransactionalAction.(TransactionalAction.java:20)
定位 play.db.jpa.TransactionalAction 1 错误时 com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025) 在 com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) 在 play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:405) 在 play.core.j.DefaultJavaHandlerComponents.getAction(JavaAction.scala:142) 在 play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:91) 在 play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:89) 在 scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:57) 在 scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:66) 在 scala.collection.mutable.ArraySeq.foldLeft(ArraySeq.scala:46) 在 play.core.j.JavaAction.apply(JavaAction.scala:89) 在 play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) 在 play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) 在 play.utils.Threads$.withContextClassLoader(Threads.scala:21) 在 play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111) 在 play.api.mvc.Action$$anonfun$apply$2$$anonfun$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.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) ...省略了14个常见框架原因: java.lang.AbstractMethodError: null at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:275) 在 org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483) 在 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888) 在 org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) 在 play.db.jpa.DefaultJPAApi.lambda$start$1(DefaultJPAApi.java:60) 在 java.lang.Iterable.forEach(Ite​​rable.java:75) 在 play.db.jpa.DefaultJPAApi.start(DefaultJPAApi.java:59) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider.(DefaultJPAApi.java:46) 在 play.db.jpa.DefaultJPAApi$JPAApiProvider$$FastClassByGuice$$dcd4cdbd.newInstance() 在 com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40) 在 com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61) 在 com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105) 在 com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 在 com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) 在 com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) 在 com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:61) 在 com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) 在 com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) 在 com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104) 在 com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) 在 com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) 在 com.google.inject.internal.InjectorImpl$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"
[...]

应用程序.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 的好教程。

谢谢!

乐:

我通过使用:

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

这里建议:https://stackoverflow.com/a/30656145/6682875

【问题讨论】:

  • 能否请您编辑问题以添加整个堆栈跟踪?
  • 当您使用它时,请解释您正在使用什么 API……因为如果是 JPA,那么您只使用 persistence.xml,如果是 Hibernate,那么您使用 hibernate.cfg.xml。它是要么,要么,而不是两者
  • @marcospereira 完成
  • @NeilStockton 我删除了hibernate.cfg.xml

标签: java hibernate playframework hibernate-search playframework-2.5


【解决方案1】:

您的配置中似乎缺少某些内容。 这是我使用的工作配置示例(只是替换了真实姓名)。注意,没有使用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>

【讨论】:

  • 除了我使用的是更新版本的 hibernate 之外,我没有看到任何重大差异。另外,根据我阅读的内容,hibernate-entitymanager 和 hibernate-search-orm 应该是相同的版本,并且没有针对 4.3.10.Final 的休眠搜索。
【解决方案2】:

我通过使用:

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

这里建议:https://stackoverflow.com/a/30656145/6682875

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多