首页 文章

Hibernate Search集成到Play Framework(JPA)中

提问于
浏览
0

我正在尝试将Hibernate Search与Play Framework一起使用 . 它接缝非常简单直接 . 但我得到一个例外(见下文):

这是我做的:

我添加了依赖项

"org.hibernate" % "hibernate-entitymanager" % "4.3.8.Final",
"org.hibernate" % "hibernate-search-orm" % "5.2.0.Final",

我已经有了Entitymanager,它运行正常 .

然后我添加了Hibernate Search属性:

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version =”2.0“>

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <class>models.User</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>

        <property name="hibernate.search.default.directory_provider"
                  value="filesystem"/>

        <property name="hibernate.search.default.indexBase"
                  value="/var/lucene/indexes"/>

    </properties>

</persistence-unit>

关于此的新内容仅限于:

<property name="hibernate.search.default.directory_provider"
                  value="filesystem"/>

        <property name="hibernate.search.default.indexBase"
                  value="/var/lucene/indexes"/>

我在用户中添加了一些注释:

@Entity
@Indexed
public class User extends Model {

     @Field(index= Index.YES, analyze= Analyze.YES, store= Store.NO)
     public String firstname;
     @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
     public String lastname;
}

我启动服务器并尝试访问该站点:

play.api.UnexpectedException: Unexpected exception[AbstractMethodError: org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.getConfigurationValues()Ljava/util/Map;]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:170) ~[play_2.11-2.3.7.jar:2.3.7]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:130) ~[play_2.11-2.3.7.jar:2.3.7]
    at scala.Option.map(Option.scala:145) ~[scala-library-2.11.4.jar:na]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:130) ~[play_2.11-2.3.7.jar:2.3.7]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:128) ~[play_2.11-2.3.7.jar:2.3.7]
Caused by: java.lang.AbstractMethodError: org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.getConfigurationValues()Ljava/util/Map;
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:404) ~[hibernate-core-4.3.9.Final.jar:4.3.9.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) ~[hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]

谢谢您的帮助 .

2 回答

  • 0

    从5.0.0到5.3.0的所有Hibernate Search版本都兼容任何Hibernate ORM版本4.3.x(4.3.0到最新的4.3系列,目前是4.3.10) .

    但是你总是必须为hibernate-entitymanager和hibernate-orm选择相同的版本,因为它们是一起发布的,不应该拆分和混合 .

    从堆栈跟踪看来,您似乎已经在使用Hibernate ORM版本4.3.9(hibernate-core-4.3.9.Final.jar),因此您不应该使用hibernate-entitymanager-4.3.8.Final,而是将EntityManager升级到4.3 . 9,或者将hibernate-core降级到4.3.8,或者只升级到4.3.10(可能是最好的选择) .

    Hibernate compatibility rules

    通常规则是hibernate-core和hibernate-entitymanager需要完全相同的版本;然后查阅Hibernate Search文档,了解它兼容的范围 .

    此信息可以在READMEreference documentation中找到,也可以通过pom.xml找到(也可以使用许多能够解释Maven元数据的工具) .

    下载页面中还提到了兼容性: - http://hibernate.org/search/downloads/

    下载页面和pom文件只提到了一个特定的Hibernate ORM版本(它是用它构建的版本) . READMEreference documentation指定要兼容的版本范围;这些都是由人类更新的,所以它可能偶尔会不那么准确,但如果这不起作用,请提交一个错误,因为我们努力保持兼容性范围放宽,特别是在次要版本中 .

    这里记录了Hibernate的兼容性定义和期望:https://github.com/hibernate/hibernate-orm/wiki/Compatibility-Considerations

  • 2

    感谢用户mhlz在评论中 . 我不得不更新实体经理 .

相关问题