我在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