java - Hibernate Search 集成到 Play Framework (JPA)

标签 java hibernate jpa hibernate-search hibernate-entitymanager

我正在尝试将 Hibernate Search 与 Play Framework 一起使用。它接缝非常容易和直接。但我遇到了一个异常(exception)(见下文):

这是我所做的:

我添加了依赖项

"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” 版本=“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]

感谢您的帮助。

最佳答案

5.0.05.3.0 的所有 Hibernate Search 版本均与任何 Hibernate ORM 版本 4.3.x 兼容( 4.3.0 到 4.3 系列的最新版本,当前为 4.3.10)。

但是您始终必须为 hibernate-entitymanagerhibernate-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 兼容性规则

一般规则是 hibernate-core 和 hibernate-entitymanager 需要处于完全相同的版本;然后查阅 Hibernate Search 文档以找出它兼容的范围。

此信息可以在 README 中找到,在 reference documentation ,或通过 pom.xml (还有许多能够解释 Maven 元数据的工具)。

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

下载页面和 pom 文件仅提到一个特定的 Hibernate ORM 版本(构建它的版本)。 READMEreference documentation指定兼容的版本范围;这些是由人类更新的,因此有时可能不太准确,但如果这不起作用,请提交错误,因为我们确实努力保持兼容性范围宽松,尤其是在次要版本中。

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

关于java - Hibernate Search 集成到 Play Framework (JPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621230/

相关文章:

java - 当对象键为数字时如何创建 Java getter 和 setter

java - 无法使用深度附件渲染到 FBO

java - jpa一对多复合主键映射

java - 鉴别器,带有 Hibernate 后端的 WrongClassException JPA

json - JPA (EclipseLink) 自定义类型是否可行?

java - 如何禁用 Spring Boot 日志记录配置?

Java - 每秒重绘组件?

hibernate - 延迟初始化失败 - 没有 session 或 session 已关闭

spring - 从 Spring 2.5 迁移到 4

java - JPA实体生命周期方法